これは私のモデルです:
//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
, (selectid
fromproject_items
whereprojects
.id
=project_items
.project_id
) asitems_count
fromprojects
where (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();
});
「プロジェクト」自体も「会社」テーブルに属します。しかし、ここではプロジェクトとプロジェクト項目のみを照会するため、関連性はないと思います。
私の英語が下手なのでごめんなさい。