2017-01-12 3 views
-1

У меня есть подобная система, построенная с полиморфными отношениями. Я бы хотел с нетерпением загружать модель likeable_type при получении Likes. Что мне нужно сделать? Я пытался добавитьLaravel 5.2 - Яркая модель отдаленной нагрузки в полиморфном отношении

protected $with = ['Post']; 

или

protected $with = ['App\Post']; 

моей Like модели, но все это я получаю:

Призыв к неопределенным метод Осветите \ Database \ Query \ Builder :: Post()

Модель:

class Like extends Model 
{ 
    use SoftDeletes; 

    protected $table = 'likeables'; 

    protected $fillable = [ 
     'user_id', 
     'likeable_id', 
     'likeable_type', 
    ]; 


    /** 
    * Get all of the owning likeable models. 
    */ 
    public function likeable() 
    { 
     return $this->morphTo(); 
    } 

} 

Сообщение Модель:

class Post extends Model 
{ 

    protected $fillable = [ 

     'picture', 
     'description' 

    ]; 


    /** 
    * 
    * a post belongs to one user 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\BelongsTo 
    */ 
    public function user(){ 

     return $this->belongsTo('App\User'); 

    } 


    /** 
    * 
    * a post has many comments 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\HasMany 
    */ 
    public function comments() 
    { 
     return $this->hasMany('App\Comment'); 
    } 


    /** 
    * Get all of the post's likes. 
    */ 
    public function likes() 
    {   

     return $this->morphMany('App\Like', 'likeable'); 
    } 


    /** 
    * 
    * Simple Like System checks if liked 
    * 
    * @return bool 
    */ 
    public function getIsLikedAttribute() 
    { 
     $like = $this->likes()->whereUserId(Auth::id())->first(); 
     return (!is_null($like)) ? true : false; 
    } 


} 
+0

Покажите нам свою модель. – Moak

+0

Теперь я добавлю к вопросу. – Chriz74

+0

Вы пробовали 'protected $ with = ['likeable']'? Обычно при активной загрузке вы ссылаетесь на отношение по имени метода – Moak

ответ

-1

Осветите \ Database \ Query \ Builder :: Post()

У вас есть проблема о посте.

Вы можете взять ДАННЫЕ, как это с "firstOrFailed()":

$ данных = имя_таблицы :: где ('$ ID', 'как', $ ID) -> firstOrFailed();

Или метод «get()». (Это изменяется при освобождении.)

Это учебник о полиморфических смещениях. https://laravel.com/docs/5.3/eloquent-relationships#polymorphic-relations

Если вы не можете решить проблему, пожалуйста, сообщите больше информации, такой как контроллер, просмотреть страницу и миграцию.

0

Я решил эту проблему, переименовав таблицу из «likeables» в «нравится».

protected $table = 'likeables'; ->protected $table = 'likes';

Теперь я могу получить отдаленное отношение при получении и т.п., как это:

$post = Post::find(6); 

dd ($post->likes()->with('likeable')->get()); 

или я могу восстановить понравившуюся сущность, как это:

$like = Like::find(1); 

$likeable = $like->likeable; 

dd($likeable); 

перед переименованием таблицы результат был нулевым. Мне еще нужно понять, как получить все объекты, Пользователь.

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