【发布时间】: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