Причина, по которой вы не получаете Review
s в своем запросе, заключается в следующей строке:
$review = Post::find(1)->reviews()->where('title', 'posts_title')->get();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Когда вы используете предложение where()
, первый параметр - это имя столбца для запроса, а второй Параметр является фактическим значением для сравнения .. не имя столбца. Таким образом, мы попытаемся найти каждый отзыв, у которого есть заголовок со значением "posts_title"
(буквально) ... следовательно, у вас возвращено 0 записей.
Теперь вам также нужно знать, как работают отношения. Если вы определите отношение в вашей модели Post
следующим образом:
# Post.php
public function reviews()
{
return $this->hasMany('App\Review', 'title', 'post_title');
}
Это будет работать следующим образом: все отзывы, для которых столбец reviews.title
равен столбцу posts.post_title
.
Таким образом, если эта настройка верна для вашей базы данных, вам не нужно повторно указывать это условие, просто выполните запрос и вместо этого вызовите метод отношений:
# PostsController.php
$related_reviews = Post::find(1)->reviews;
Также обратите внимание, что при необходимости использования обратной связи вам также необходимо указать laravel пользовательский PK / FK, который будет использоваться для получения правильных результатов.
# Review.php
public function post()
{
return $this->belongsTo('App\Post', 'title', 'post_title');
}
Как примечание: если вы управляете вашими отелями как posts
в вашей базе данных ... правильное имя для этой модели и таблицы должно быть Hotel
и hotels
, соответственно.