【问题标题】:Laravel 5.2 - Eloquent Many to Many RelationshipLaravel 5.2 - 雄辩的多对多关系
【发布时间】:2016-11-03 00:05:03
【问题描述】:

我有 2 个模型和 3 个迁移,模型是

1-Media:

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Media extends Model
{
  public function gallery(){
        return $this->hasMany('App\Gallery', 'media_gallery');
    }
}

2-Gallery:

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Gallery extends Model
{
  public function media(){
        return $this->belongsToMany('App\Media', 'media_gallery');
    }
}

迁移是

1- 对于media 表,架构是:

Schema::create('media', function (Blueprint $table) {
   $table->increments('id');
   $table->timestamps();
});

2- 对于gallery 表,架构是:

Schema::create('galleries', function (Blueprint $table) {
   $table->increments('id');
   $table->timestamps();
   $table->string('path');
   $table->string('type');
});

3-media_gallery多对多关系的第三个连接表:

Schema::create('media_gallery', function (Blueprint $table) {
    $table->increments('id');
    $table->timestamps();
    $table->integer('media_id');
    $table->integer('gallery_id');
});

概念:我已经安装并运行了 Dropzone,因此我可以将项目上传到 Gallery 表,但我想要做的是我制作一个 Media 项目以便它可以容纳一个或多个Gallery 项目,一个gallery 项目可以与多个media 项目相关

什么我试过了: 我制作了一个包含每个画廊项目的表单,其中一个复选框包含项目的id,这就是我在控制器中处理它的方式...

public function MediaPostUpload(Request $request){

        $media = new Media();
        $media->save();

        //fetching ids of checked boxes
        $galleryItems = $request['galleryItems'];
        $ids = array();
        if(!empty($galleryItems)){
            foreach($galleryItems as $itemId){
                $ids[] = $itemId;
            }
        }
        $media->gallery()->attach($ids);
}

错误出现:

SQLSTATE[42S22]:未找到列:1054 未知列 'where 子句'中的'galleries.media_gallery'(SQL:select * from galleries 其中galleries.media_gallery = 1 和 galleries.media_gallery 不为空)

【问题讨论】:

  • 您也应该在媒体模型中使用belongsToMany
  • 不是反比关系?这是为什么?我是新人,如果我有一些声明可以理解,那就太好了
  • 我不知道它是否能解决你的问题,但是多对多确实有反比关系,这是相同的关系,因为枢轴总是有两个键
  • 这解决了我的情况我试过了。你可以输入它作为答案给你点吗?
  • 当然!完成了!谢谢

标签: database laravel eloquent laravel-5.1 relationship


【解决方案1】:

您也必须在您的媒体模型中使用 belongsToMany 关联:

class Media extends Model
{
  public function gallery(){
        return $this->belongsToMany('App\Gallery', 'media_gallery');
    }
}

多对多没有反向关系,它是相同的关系,因为枢轴总是有两个键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 2018-10-27
    • 2018-03-28
    相关资源
    最近更新 更多