0

これは私のモデルです:

//project model
class Project extends Model {
    .....
    public function items(){
        return $this->hasMany(ProjectItem::class,'project_id');
    }
}
//project items model
class ProjectItem extends Model{
    ...
 public function project(){
        return $this->belongsTo(Project::class);
    }
}

私のコントローラーでは、プロジェクトアイテムの数でコレクションを取得したい $projects =

Project::Select(['id','title'])->Where([            
            ['company' , '=', $company->id]
        ])->withCount('items')->paginate(50);

しかし、私はこのエラーが発生します:

SQLSTATE[21000]: カーディナリティ違反: 1242 サブクエリが複数の行を返します (SQL: select id, title, (select idfrom project_itemswhere projects. id= project_items. project_id) as items_countfrom projectswhere ( company= 2) limit 50 offset 0)

ここで何が問題なのですか?クエリで SQL COUNT() 関数を使用せず、代わりに SELECT を使用するのはなぜですか?

私は jetstream inertia を使用しているため、代わりにコレクションが必要になります。また、コレクションにも関係モデルをロードしたくありません。

編集

テーブルの作成方法は次のとおりです。

//projects table
Schema::create('projects', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->unsignedBigInteger('company');
            $table->foreign('company')->references('id')->on('company')->onDelete('cascade');//projects is belong to another company table.
            $table->timestamps();
        });

//project_items table
Schema::create('project_items', function (Blueprint $table) {
            $table->id();
            $table->string('title');  
            $table->longText('desc')->nullable();
            $table->unsignedBigInteger('project_id');
            $table->foreign('project_id')->references('id')->on('projects');
            $table->timestamps();
        });

「プロジェクト」自体も「会社」テーブルに属します。しかし、ここではプロジェクトとプロジェクト項目のみを照会するため、関連性はないと思います。

私の英語が下手なのでごめんなさい。

4

1 に答える 1