#php #laravel-4 #eloquent
#php #laravel-4 #красноречивый
Вопрос:
У меня есть 3 таблицы.
1. сообщения
2.категории
3.category_post.
Мои таблицы сообщений здесь :
------------ ------------------ ------ ----- --------------------- ----------------
| Field | Type | Null | Key | Default | Extra |
------------ ------------------ ------ ----- --------------------- ----------------
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | NULL | |
| slug | varchar(255) | NO | | NULL | |
| reporter | varchar(255) | NO | | NULL | |
| meta | varchar(255) | NO | | 0 | |
| body | text | NO | | NULL | |
| image | varchar(255) | NO | | 0 | |
| top | tinyint(1) | NO | | 0 | |
| post_count | int(11) | NO | | 0 | |
| created_at | timestamp | NO | | 0000-00-00 00:00:00 | |
| updated_at | timestamp | NO | | 0000-00-00 00:00:00 | |
------------ ------------------ ------ ----- --------------------- ----------------
Моя таблица категорий здесь:
--------------- ------------------ ------ ----- --------------------- ----------------
| Field | Type | Null | Key | Default | Extra |
--------------- ------------------ ------ ----- --------------------- ----------------
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| category_slug | varchar(255) | NO | | NULL | |
| parrent_id | int(11) | NO | | 0 | |
| created_at | timestamp | NO | | 0000-00-00 00:00:00 | |
| updated_at | timestamp | NO | | 0000-00-00 00:00:00 | |
--------------- ------------------ ------ ----- --------------------- ----------------
Моя таблица category_post:
------------- ------------------ ------ ----- --------- ----------------
| Field | Type | Null | Key | Default | Extra |
------------- ------------------ ------ ----- --------- ----------------
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| category_id | int(10) unsigned | NO | MUL | NULL | |
| post_id | int(10) unsigned | NO | MUL | NULL | |
------------- ------------------ ------ ----- --------- ----------------
Я могу создать сообщение с несколькими выбранными категориями. Но когда я хочу показать сообщение по категориям, я не могу получить доступ к таблице категорий. Это означает, что я хочу просматривать название категории с каждым сообщением.
Вот мои модели:
В модели категории:
public function posts()
{
return $this->belongsToMany('Post');
}
В модели Post:
public function categories()
{
return $this->belongsToMany('Category');
}
Моя вспомогательная функция запроса предназначена для публикации по категориям:
public static function cat_post($category, $limit, $top)
{
$posts = Post::whereHas('categories', function($q) use ($category, $top)
{
$q->where('name', 'like', $category);
$q->where('top', 'like', $top);
})->with('categories')->take($limit)->orderBy('created_at', 'DESC')->get();
return $posts;
}
Я могу просматривать все данные post. Но названия категории нет.
Мои циклы Post:
<?php $headline = Helper::head_post(10, 1); ?>
@foreach ($headline as $post)
<li><a href="">{{ $post->title }}</a></li>
@endforeach
когда я пытаюсь использовать это для названия категории, оно не работает:
@foreach ($headline as $post)
<li><a href="">{{ $post->categories->name }}</a></li>
@endforeach
Пожалуйста, помогите мне.
Ответ №1:
Потому что это отношение «многие ко многим $post->categories->name
» не будет работать. Он не знает, какую категорию (из многих) вы хотите назвать.
Таким образом, вы могли бы, например, использовать $post->categories()->first()->name
для получения имени первой категории или перебирать их, чтобы получить имя всех категорий.