【发布时间】:2019-04-25 22:27:56
【问题描述】:
我使用的是 Lumen 5.1,任务和用户之间存在多对多关系
任务模型
public function user()
{
return $this->belongsToMany('App\Models\Auth\User', 'task_user');
}
public function domain()
{
return $this->hasOne('App\Models\Domain', 'domain_id');
}
用户模型
public function tasks()
{
return $this->belongsToMany(Task::class, 'task_user');
}
用户任务模型
class UserTask {}
我要搜索任务的获取用户,我的代码是
$tasks = Task::Where(function ($query) use ($domainId) {
$query->where("domain_id", $domainId)
->where("is_done", 0)
->orwherehas('tasks.user.id', \Auth::id)
->orderBy('due_date', 'DESC');
})
->orWhere(function ($query) use ($domainId) {
$query->where("domain_id", $domainId)
->Where("is_done", 1)
->Where("closed_dated", Carbon::today())
->orwherehas('tasks.user.id', \Auth::id)
->orderBy('closed_date', 'ASC');
})
->get();
我的问题是whereHas 对吗? tasks.user.id 正确吗?我可以通过这种方式获取用户的 id 吗?我这样做是因为this question
技术负责人告诉我我的代码有误,他会使用where,他说当你想运行闭包时使用whereHas。
迁移:
任务
public function up()
{
Schema::create($this->getTable(), function (Blueprint $table) {
$table->increments('id');
$table->string('title')->nullable();
$table->dateTime('submit_date');
$table->dateTime('closed_date');
$table->dateTime('due_date');
$table->tinyInteger('is_done')->default(0);
$table->integer('domain_id')->unsigned()->nullable();
$table->foreign('domain_id')->references('id')
->on(self::getTableName('domains'))->onDelete('cascade');
$table->bigInteger('created_by')->unsigned()->nullable();
$table->foreign('created_by')->references('id')
->on(self::getTableName('auth_users', false))->onDelete('cascade');
$table->bigInteger('closed_by')->unsigned()->nullable();
$table->foreign('closed_by')->references('id')
->on(self::getTableName('auth_users', false))->onDelete('cascade');
$table->timestamps();
});
}
public function down()
{
Schema::drop($this->getTable());
}
task_user
public function up()
{
Schema::create($this->getTable(), function (Blueprint $table) {
$table->increments('id');
$table->integer('task_id')->unsigned()->nullable();
$table->foreign('task_id')->references('id')
->on(self::getTableName('tasks'))
->onDelete('cascade');
$table->bigInteger('user_id')->unsigned()->nullable();
$table->foreign('user_id')->references('id')
->on(self::getTableName('auth_users', false))
->onDelete('cascade');
});
}
public function down()
{
Schema::drop($this->getTable());
}
【问题讨论】:
-
澄清一下,您是否要获取已分配给用户但今天已完成或根本未完成的任务?
-
@RossWilson 请参考这个问题 (stackoverflow.com/questions/53464283/…) 一个用户可以创建一个任务并分配给多个用户,任务和用户之间是多对多的关系
-
@RossWilson 我想查找由用户创建或分配给用户的所有任务,如果它们未完成或今天已关闭。所以用户可以看到他所有打开的任务+他今天关闭的任务,如果任务是打开的,它们应该按截止日期最差的一个排序,意思是紧迫性
-
请您为
tasks和task_user添加您的迁移(或只是表结构)? -
@RossWilson 刚刚添加了它们
标签: php laravel eloquent lumen