在 laravel 10 网站上我有 3 个相关表:
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
...
$table->timestamp('created_at')->useCurrent();
});
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->foreignId('creator_id')->references('id')->on('users')->onUpdate('RESTRICT')->onDelete('CASCADE');
$table->boolean('completed')->default(false);
...
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->nullable();
});
Schema::create('task_user', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreignId('task_id')->references('id')->on('tasks')->onUpdate('RESTRICT')->onDelete('CASCADE');
$table->timestamp('created_at')->useCurrent();
$table->unique(['user_id', 'task_id']);
});
我在 app/Models/User.php 中定义了枢轴关系:
public function tasks(): belongsToMany {
return $this->belongsToMany(Task::class);
}
但是在这种关系中我如何才能仅限于未完成的任务,其中
tasks.completed = false
?
"laravel/framework": "^10.48.7",
提前致谢!
我对 Laravel 很陌生,但在 Laravel 文档中,对于这样的情况,apperas 是 wherePivot() 方法:
public function tasks(): belongsToMany {
return $this->belongsToMany(Task::class)->wherePivot('completed',false);
}
https://laravel.com/docs/10.x/eloquent-relationships#filtering-queries-via-intermediate-table-columns 据我了解,这可以解决问题。