Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Есть типа такие 2 таблицы
class Category extends Eloquent
{
public function posts()
{
return $this->has_many('Post');
}
}
class Post extends Eloquent
{
public function category()
{
return $this->belongs_to('Category');
}
}
Запись $post = Post::find(1);
А как получить категорию поста я так и не понял
$post->category->title
Выдает Trying to get property of non-object
Не в сети
category — это метод, а не свойство. Есть статья про отношения с примерами.
Не в сети
Я это все читал и пробовал, только там отношение has_one
В случае one-to-many
// Тут нормально:
$category = Category::find(1);
// Это работает (магич св-во):
foreach($category->posts as $post)
echo $post->title . '<br>';
// и это работает
foreach($category->posts()->get() as $post)
echo $post->title . '<br>';
Делал по аналогии и смотрел ошибку, dd или получаемый запрос (если доходило до запроса)
$post->category->title - не сработало
$post->category()->title - не сработало
$post->category->title - не сработало
$post->category()->first()->title - СРАБОТАЛО
При чем потребовалось явно указать внешний ключ return $this->belongs_to('Category', 'category_id');
В Kohana сработает echo $post->category->title без лишних движений (это можно даже не передавать в шаблон, а сделать там)
Тут получается я выполняю почти обычный запрос и как-то выполнять это в шаблоне $post->category()->first()->title не очень правильно.
Зато в случае с категориями в шаблоне нормально выйдет (нужно передать только $category)
<h1>{{ $category->title }}</h1>
{{ $category->description }}
@foreach ($category->posts as $post)
<h2>{{ HTML::link_to_route('post', $post->title, array($post->slug)) }}</h2>
{{ $post->short }}
@endforeach
Изменено amberlex (13.02.2013 10:48:56)
Не в сети
Не в сети
PHP$post->category()->first()->title
— СРАБОТАЛО
Конечно сработает, метод category (да, это метод, а не свойство — ты ведь сам определяешь его как PHPfunction category()
в классе модели) возвращает объект запроса (Query). Аналогичный объект ты получишь, если сделаешь PHPPost::where('category_id', '=', 1)
. А раз это Query, то нужно вызвать PHPfirst()
, PHPget()
, PHPsum()
или любой другой метод для получения результата.
Собственно, по ссылке выше пример для PHPhas_one()
, а следующий после него — для PHPbelongs_to()
. Результат оба дают аналогичный.
Не в сети
Так в том то и дело, зачем мне такая связь, если проще сделать Category::where('id', '=', $post->category_id)
Весь смысл теряется тогда.
А в таком случае как раз нормально было бы $post->category->title
Э-э-х (
Изменено amberlex (13.02.2013 15:29:54)
Не в сети
Не в сети
Да, так лучше будет, но после коханы как-то недоделано или не так изящно кажется все)
Интересно почему не срабатывает "магическое" как для $category->posts
Нужно наверное посмотреть как это работает
Изменено amberlex (13.02.2013 15:53:17)
Не в сети
Страницы 1