2015-10-07 169 views
2

我有2個表格,用戶圖片。這些表格具有多對多的關係,我創建了一個數據透視表名稱user_picturesLaravel - 多對多關係

在使用者表如下:

id 
firstname 
lastname 

中的圖片表如下:

id 
filename 
url 

的user_pictures表包含:

id 
user_id 
picture_id 

當用戶添加的圖片,圖片文件名網址存儲在圖片表,並在user_picturespicture_id那張照片的存儲沿着該用戶的USER_ID

我怎樣才能檢索到所有的圖片文件名 URL 相關使用ORM口才已經加入它們的用戶?

回答

1
namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model 
{ 
    protected $table = 'users'; 
    // Define pictures with a pivot table link 
    public function pictures() { 
     return $this->belongsToMany('App\Models\UserPicture', 'user_pictures', 'picture_id', 'user_id'); 
    } 
    //add methods 
} 

class UserPicture extends Model 
{ 
    protected $table = 'user_pictures'; 
    public function picture() { 
     return $this->hasOne('App\Models\Picture', 'id', 'picture_id'); 
    } 

    public function user() { 
     return $this->hasOne('App\Models\User', 'id', 'user_id'); 
    } 
    //add methods 
} 

class Pictures extends Model 
{ 
    protected $table = 'pictures'; 
    //add methods 
} 

如果你不想時間戳添加到表,你必須添加這2種方法:

public function setCreatedAt($value) { 
     // to disable created_at 
    } 

    public function setUpdatedAt($value) { 
     // to disable created_at 
    } 

從用戶獲取圖片做到這一點:

$userPictures = UserPicture::where(array('user_id'=>1)->get(); 
foreach($userPictures as $userpicture) { 
    $picture = $userpicture->picture(); 
} 
+0

如何我循環相關聯的所有圖片讓所有相關的用戶ID圖片? –

+0

'$ user = User ::其中('id',1) - > get();' '$ user將包含其詳細信息,如 - ' '$ user - > ['id'] = 1' '$ user - > ['name'] =「您的姓名」' '$ user - > ['pictures'] = _array_of_user_pictures_' 因此循環遍歷'$ user - > ['pictures']' – iamkdev

+0

我添加了圖像檢索到我的答案 –

0

在您的User型號添加以下關係

public function pictures() 
{ 
    return $this->belongsToMany(App\Picture::class, 'user_pictures'); 
} 

在你Picture模型添加在我UserController中的follwing關係

public function users() 
{ 
    return $this->belongsToMany(App\User::class, 'user_pictures'); 
} 

然後打通與用戶

$pictures = $someUserObject->pictures;