2017-06-21 8 views
0

スクリーンショットのように:enter image description hereイーガーロード:多形の関係をテーブルからいくつかの写真を取得するにはどのように似たアバターを持つユーザーと4枚の写真の一覧を取得するには文句を言わない

Userモデル:

public function avatar() 
    { 
     return $this->morphOne(Photo::class, 'photoable') 
     ->where('photoable_type', 'user'); 
    } 

    public function photos() 
    { 
    return $this->morphMany(Photo::class, 'photoable') 
     ->where('photoable_type', 'photo'); 
    } 

    public function scopeLastPhotos($query) 
    { 
     return $query->with(['photos' => function ($query) { 

     $query->take(4)->get(); 

     }]); 
    } 

写真モデル:

public function photoable() 
    { 
     return $this->morphTo(); 
    } 

は、私が試した:

$users = User::with('avatar')->lastPhotos()->get(); 

が、結果だけのアバターや空の写真のコレクションを持っていた:

enter image description here

すべての写真がテーブルの上に存在しています。

答えて

0

私は、MySQL関数 'GROUP_CONCAT' でこの問題を解決:

public function scopeLastPhotos($query) 
{ 
    return $query->join('photos', 'photos.photoable_id', 'users.id') 
     ->selectRaw('users.*, group_concat(photos.hash) as hashes') 
     ->where('photos.photoable_type', 'photo') 
     ->groupBy('photos.photoable_id'); 
} 

しかし、 'GROUP_CONCAT' は '限界' https://bugs.mysql.com/bug.php?id=30098を持っていません。私の仕事のために

私はこの決定に使用:

@foreach(explode(',', $user->hashes) as $hash) 

    {{ $hash }} 

    @break($loop->iteration == 4) 

@endforeach 

をしかし、おそらく誰かがよりエレガントな決意を知っていますか?

関連する問題