У меня много-много отношений между задачей и пользователями, я пытаюсь получить заархивированные задачи, заархивированная задача:
- Задача, которая
is_done = 1
Задача, которая была выполнена вчера или раньше, не включая задачи, завершенные сегодня
Пользователь может видеть только те архивные задачи, которые он создал или ему назначены, если пользователь назначен назадача, его идентификатор хранится в сводной таблице
- По причинам, выходящим за рамки вопроса, я могу получить доступ к пользователям только с помощью сводной таблицы, как показано в Task.php ниже.
Модель Task.php
public function taskUsers()
{
return $this->hasMany('App\Models\Tasks\UserTask')->where('role',1);
}
Модель UserTask.php ничего не содержит, пустая модель
class UserTask extends BaseModel { }
Миграции
class CreateTasksTable extends Migration
{
protected $table = 'tasks';
protected $app_table = true;
public function up()
{
Schema::create($this->getTable(), function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->dateTime('submit_date');
$table->dateTime('closed_date')->nullable();
$table->dateTime('due_date')->nullable();
$table->tinyInteger('is_done')->nullable()->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());
}
}
и
class CreateTaskUsersTable extends Migration
{
protected $table = 'task_user';
protected $app_table = true;
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');
$table->integer('role');
});
}
public function down()
{
Schema::drop($this->getTable());
}
}
Фактические таблицы соответственно
и
Мой код:
Помощник ниже
public static function getArchived($domainId, $userId)
{
Task::where("domain_id", $domainId)
->where("is_done", 1)
->where("closed_date", '<', Carbon::today()->startOfDay())
->where(function ($query) use ($userId) {
$query->whereHas('taskUsers', function ($query) use ($userId) {
$query->where('user_id', $userId);
});
})
->orWhere(function ($query) use ($userId) {
$query->where('created_by', $userId);
})
->get();
}
Действие:
public function execute()
{
$domainId = $this->request->get('domain_id');
$userId = \Auth::id();
$tasks = TasksHelper::getArchived($domainId,$userId);
return $this->response->statusOk(['tasks' => $tasks]);
}
Я просто получаю статус ОК, результата нет,массив задачявляется нулевым, хотя мой код кажется правильным, и таблицы содержат 1 запись, которая должна была быть возвращена.