Laravel принадлежит к игнорированию внешнего ключа

У меня есть 2 модели, Пользователь и Задача.

Task.php:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
//
protected $fillable=['text','title','user_id','completed','created_by'];
public function users()
{
return $this->belongsTo(User::class, 'id');
}

}

и User.php:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
use Notifiable;

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];

/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function tasks()
{
return $this->hasMany(Task::class);
}
}

Моя цель здесь состоит в том, чтобы каждая задача была назначена пользователю, чтобы я мог получить имя пользователя, который создал эту задачу.
В таблице users есть столбцы id и name. Таблица задач также имеет столбец идентификатора.
Итак, как я могу получить имя пользователя, который создал задачу, используя красноречивые отношения?

App\User::first()->tasks

дает:

Illuminate/Database/QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tasks.user_id' in 'where clause' (SQL: select * from `tasks` where `tasks`.`user_id` = 1 and `tasks`.`user_id` is not null)'

1

Решение

Чтобы решить эту проблему, я добавил эту функцию в Task.php

 public function users()
{
return $this->belongsTo(User::class, 'created_by');
}

Я не должен был использовать id в качестве внешнего ключа. А также удалены

 public function tasks()
{
return $this->hasMany(Task::class);
}

от модели пользователя.

1

Другие решения

Вы сказали "My objective here is to have every task assigned to a user..." поэтому я верю, что одна задача принадлежит только одному пользователю. Если это так, то это действительно Один ко многим отношения. Вам следует позвонить user() не users() на Task модель:

public function user()
{
return $this->belongsTo(User::class);
}
0

Может быть, проблема в вашей модели задач

public function users()
{
return $this->belongsTo(User::class, 'user_id');
}

Я видел документация и Laravel использует foreign_key в качестве второго параметра, а не primary_key как второй параметр

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector