【问题标题】:Laravel - Many to Many relationshipLaravel - 多对多关系
【发布时间】:2016-01-04 16:01:47
【问题描述】:

我有 2 个表格,用户图片。这些表具有多对多关系,我创建了一个数据透视表名称 user_pictures

users表如下:

id
firstname
lastname

图片表如下:

id
filename
url 

user_pictures 表包含:

id
user_id
picture_id

当用户添加图片时,图片filenameurl存储在pictures表中,user_pictures 表中,该图片的 picture_id 存储在该用户的 user_id 旁边。

如何检索与使用 Eloquent ORM 添加的用户相关的所有图片 filenameurl

【问题讨论】:

    标签: php mysql laravel eloquent


    【解决方案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
    }
    

    如果您不想给表格添加时间戳,您必须添加以下两种方法:

     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();
    }
    

    【讨论】:

    • 如何在我的 UserController 中循环获取与用户 ID 相关的所有图片?
    • $user = User::where('id', 1)->get(); $user will contain its details like -- $user->['id'] = 1 $user->['name'] = "Your Name" $user->['pictures'] = _array_of_user_pictures_ 因此循环通过$user->['pictures']
    • 我将图像检索添加到我的答案中
    【解决方案2】:

    在您的 User 模型中添加以下关系

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

    在您的 Picture 模型中添加以下关系

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

    然后获取与一个用户关联的所有图片

    $pictures = $someUserObject->pictures;
    

    【讨论】:

      猜你喜欢
      • 2018-06-15
      • 2018-01-22
      • 2016-02-26
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多