On laravel 10 site I have 3 related tables :
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->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->nullable();
});
Schema::create('task_users', 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']);
});
Last table is many to many relation which tasks are assigned to which user.
Field tasks.creator_id is different – who created a task.
Model app/Models/User.php have :
public function tasks(): HasManyThrough {
return $this->hasManyThrough(
Task::class,
TaskUser::class,
);
}
Running request :
$this->profileUser = User::getById($this->userId)->with('tasks')->first();
I have error :
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tasks.task_user_id' in 'on clause'
SELECT
`tasks`.*,
`task_users`.`user_id` AS `laravel_through_key`
FROM
`tasks`
INNER JOIN `task_users` ON `task_users`.`id` = `tasks`.`task_user_id`
WHERE
`task_users`.`user_id` IN (1)
Table tasks has no task_user_id field at all. Which syntax is valid ? Must other Task, TaskUser models have
any other relations ro make my relation working correctly ?
"laravel/framework": "^10.48.7",
Thanks in advance!