使用外键存储到引用表(LARAVEL 5.2)

时间:2016-12-07 18:55:28

标签: laravel-5 foreign-keys relational-database

我无法理解,而且我生气了。

我有2个表:项目,画廊

在项目表中,我有以下字段:标题,描述,图库(多上传)

Galleries表是一个存储项目ID和图像文件名的参考表

我读到存储属于记录的值数组的最佳方法是设置一个保留这些值与记录ID之间关系的引用表。

这是我的实际配置:

我设置了我的图库模型

class Gallery extends Model
{
    public function project()
    {
    return $this->hasMany('App\Project');
    } 
}

我设置了我的项目模型

class Project extends Model
{
    public function gallery()
    {
    return $this->belongsTo('App\Gallery');
    } 
}

在我的项目控制器上......

$post = new Project;
$post->title = $data->title;
$post->save();

现在我应该做实际的关系。因此,将文件名存储到画廊表的image_name列中,并将项目ID(刚刚生成创建当前项目)存储到画廊表的project_id列中......

我有$ filenames,这是包含文件名的数组..必须存储在参考表中

2 个答案:

答案 0 :(得分:0)

项目属于图库,因此在您的情况下,它必须包含至少3列:idimage_nameproject_id(无id_project)

然后,如果$filename数组包含文件名,而$ post是$gallery的实例,请执行以下操作:

foreach($filename as $file)
    $post->gallery()->create(['image_name' => $file]);

这将创建与$post图库相关的任意数量的新项目,因为许多项目包含您的$filename数组。

微小提示:将project()关系方法重命名为projects() - 将更容易理解其中包含的内容。目前的名称只建议一个项目。

答案 1 :(得分:0)

解决方案比我更容易

我无法理解,而且我生气了。

我有2个表:项目,画廊

在项目表中,我有以下字段:标题,描述,图库(多上传)

Galleries表是一个存储项目ID和图像文件名的参考表

我读到存储属于记录的值数组的最佳方法是设置一个保留这些值与记录ID之间关系的引用表。

这是我的实际配置:

我设置了我的图库模型

class Gallery extends Model
{
    // you must indicate the DB fields that will be used by the create method
    protected $fillable = ['project_id', 'image_path'];
}

我设置了我的项目模型

class Project extends Model
{
    public function gallery()
    {
    return $this->hasMany('App\Gallery');
    } 
}

我的项目负责人......

$post = new Project;
$post->title = $data->title;
$post->description = $data->description;
$post->client = $data->client;
$post->save();

$postGallery = new Gallery;

// $images is an array        
$images = $data->file('gallery');

foreach($images as $key => $image) {

    $filename =  'banana.jpg'

    $postGallery->create(['image_path' => $filename, 'project_id' => $data->id]);
}