Когда вы определяете Отношение в Laravel, например:
class Comment extends Model
{
/**
* Get the original post from where the comment is from.
*/
public function post()
{
return $this->belongsTo('App\Post');
}
}
Laravel не определяет ограничение отношений в вашей базе данных по умолчанию. Это не то, как Laravel обрабатывает отношения.
Чтобы указать его, вам нужно добавить ограничение при переносе, например состояния документации :
Schema::table('comments', function (Blueprint $table) {
$table->unsignedInteger('post_id');
// Check this part:
$table->foreign('post_id')->references('id')->on('posts');
});
Обновление:
Я думаю, что фактическая версия документов ( L5.6 ) удалила эту часть, но в L5.0 вы можете увидеть ее:
Проверьте эту часть:
Давайте представим, что у модели User
может быть один Phone
. Мы можем
определите это отношение в Eloquent:
class User extends Model {
public function phone()
{
return $this->hasOne('App\Phone');
}
}
Первый аргумент, переданный методу hasOne
, - это имя
родственная модель. Как только отношения определены, мы можем получить их
используя динамические свойства Eloquent:
$phone = User::find(1)->phone;
SQL, выполняемый этим оператором, будет следующим:
select * from users where id = 1
select * from phones where user_id = 1
Обратите внимание, что Eloquent принимает внешний ключ отношения на основе названия модели. В этом случае предполагается, что модель телефона использует
внешний ключ user_id.
Как вы можете видеть жирным шрифтом, именно так Laravel удается получить информацию об отношениях.
Также, проверьте этот ответ .