database - Laravel 5.2 - Eloquent 多对多关系

标签 database laravel eloquent laravel-5.1 relationship

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

1-媒体:

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

2-画廊:

<?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,这就是我在 Controller 中处理它的方式......

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]: Column not found: 1054 Unknown column 'galleries.media_gallery' in 'where clause' (SQL: select * from galleries where galleries.media_gallery = 1 and galleries.media_gallery is not null)

最佳答案

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

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

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

关于database - Laravel 5.2 - Eloquent 多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38130803/

相关文章:

mysql - 连接和过滤一对多关系

php - 类 Closure 的对象无法转换为字符串 laravel

php - Laravel - 找不到关系时用空数组替换 null

mysql - 如何将 sql 函数添加到 Laravel Eloquent 模型

Laravel 5.2 Eloquent - 通过作用域访问

MySQL通过表连接获取数据

mysql - Django 模型 : What is a efficient way to list Foreign Key?

database - 带有数据库的 ReasonML 示例 Web 服务器

php - Pluck id(整数)转换为字符串 Laravel

javascript - 从 Angular 到 Laravel 的 POST 不起作用