2015-06-29 4 views
0

У меня простая система блога с таблицей posts, tags и posts_tags. В таблице posts и tags оба имеют поля id и content, тогда как таблица posts_tags имеет поля post_id и tag_id. Мои красноречивые модели:Eloquent has() in Many-To-Many

class Post extends \Illuminate\Database\Eloquent\Model 
{ 
    public function tags() 
    { 
     return $this->belongsToMany('Tag', 'posts_tags', 'post_id', 'tag_id'); 
    } 
} 

и

class Tag extends \Illuminate\Database\Eloquent\Model 
{ 
    public function posts() 
    { 
     return $this->belongsToMany('Post', 'posts_tags', 'tag_id', 'post_id'); 
    } 
} 

Теперь, насколько я понял, если я называю Post::has('tags')->get() я должен получить сообщения, которые имеют по крайней мере один тег (который все делать). Но все, что я получаю, это пустой массив (который я получаю при вызове Tag::has('posts')->get()). Что я делаю не так?

ответ

0

Хорошо, нашли проблему в этом вопросе: Laravel Eloquent::Find() returning NULL with an existing ID

Проблема была, я использую мягкие удаляет

class Post extends \Illuminate\Database\Eloquent\Model 
{ 
    use SoftDeletingTrait; 

    protected $dates = ['deleted_at']; 

    public function tags() 
    { 
     return $this->belongsToMany('Tag', 'posts_tags', 'post_id', 'tag_id'); 
    } 
} 

Но мой deleted_at колонка не обнуляемым.

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