Дано:
1. миграция на таблицу пользователей книг
Schema::create('books_users', function (Blueprint $table) {
$table->increments('id');
$table->string('first_name');
$table->string('last_name');
$table->string("email");
});
2. миграция на таблицу книг:
Schema::create('books', function (Blueprint $table) {
$table->increments("id");
$table->integer("book_user_id")->nullable()->unsigned();
$table->string("author");
$table->string("genre");
$table->smallInteger("year")->unsigned();
$table->string("title");
$table->foreign('book_user_id')->references('id')->on('books_users');
});
3. модель пользователей:
namespace App\Models\FrontEnd\Users;
use Illuminate\Database\Eloquent\Model;
class BookUser extends Model
{
protected $table = 'books_users';
protected $fillable = ['first_name', 'last_name'];
public $timestamps = false;
public function books(){
return $this->hasMany('\App\Models\FrontEnd\Books\Book');
}
}
4. модель книг:
class Book extends Model
{
protected $table = 'books';
protected $fillable = [
'author',
'genre',
'year',
'title',
'book_user_id'
];
public $timestamps = false;
public function owner(){
/*
Вопрос:
Почему тут мне приходится явно указывать колонку?
В случае с моделью BookUser мне не приходилось это делать.
В чем тут разница?
*/
return $this->belongsTo('\App\Models\FrontEnd\Users\BookUser");
}
}
связь между пользователем и кнгиой работает отлично, вот такой код вполне работает:
$x = new \App\Models\FrontEnd\Users\BookUser();
$res = $x->first();
dd($res->books->toArray());
Но вот связь между книгой и пользователем вообще не работает...
$y = new \App\Models\FrontEnd\Books\Book();
$res = $y->first();
dd($res->owner->toArray());
Единственное, что помогает, это явное указание колонки:
return $this->belongsTo('\App\Models\FrontEnd\Users\BookUser','id');
Как мне избавится от явного указания колонки? Ведь в случае с моделью пользователя мне не пришлось явно указывать имя колонки. почему?