2016-09-10 2 views
0

Я пытаюсь реализовать множество отношений, используя сводную таблицу. Имя моей сводной таблицы - «post_tag», а имена столбцов - «post_id» и «tag_id». Классы модели post и tag выглядят ниже.Laravel 5.2.29 От многих до многих отношений не работает

class Post extends Model 
{ 
    protected $fillable = array(
     'title', 
     'text', 
     'active', 
     'user_id' 
    ); 

    public function user() 
    { 
     return $this->belongsTo('App\Post'); 
    } 

    public function comments() 
    { 
     return $this->hasMany('App\Comment'); 
    } 

    public function tags() 
    { 
     return $this->hasMany('App\Post', 'post_id'); 
    } 

} 

А класс тега, как показано ниже:

class Tag extends Model 
{ 
    public function posts() 
    { 
     return $this->hasMany('App\Post'); 
    } 
} 

В таблице post_tag выглядит, как показано ниже:

 
post_id tag_id 
1  1 
1  2 
2  1 

Я пытаюсь теги для поста, используя следующий код:

$user = User::find(1); 
    foreach ($user->posts as $post) { 
     foreach ($post->tags as $tag) { 
      print $tag->title; 
      print "<br>"; 
     } 
     print "<br>"; 
    } 

Но это бросает Ошибка:

QueryException в connection.php линии 729: SQLSTATE [42S22]: Column не найдено: 1054 Неизвестный столбец 'posts.post_id' в 'где предложение' (SQL: выберите * от posts где posts. post_id = 1 и posts. post_id не является отрицательным)

Я думаю, что я чего-то не хватает. Может кто-нибудь, пожалуйста, дайте мне знать.

Благодаря

+0

ваш метод тегов на сообщение модели должны подключаться к App/Tag вместо App/Post – follio

ответ

1

Вы настроены неправильно отношения в tags() метод Post Model. Он должен быть return $this->belongsToMany('App\Tag');

И в posts() методе тегов модели вы должны установить вернуть $this->belongsToMany('App\Post');

Для получения дополнительной информации вы можете увидеть его в laravel docs

+0

Привет, я изменил метод так, чтобы он выглядел следующим образом: public function tags() { return $ this-> hasMany ('App \ Tag'); } Но он все еще не работает. Это дает мне эту ошибку: QueryException в строке Connection.php 729: SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'tags.post_id' в 'where clause' (SQL: select * from 'tags' где' теги'.'post_id' = 1 и 'tags'.'post_id' не являются нулевыми) –

+0

Вы должны использовать метод' ownToMany', см. обновленный ответ – follio

+0

Спасибо @Follio. Предлагаемые изменения сработали для меня. –

Смежные вопросы