【发布时间】:2014-08-23 07:56:16
【问题描述】:
我有两个表格:“文章”和“图片”。在我的Articles 我有:
`...
'body'
'image-1'
'image-2'
'image-3'
'image-4'
...`
我想将每篇文章与存储在我的数据库中的一张、两张、三张……图像相关联。而且,当然,所有图像都可以用于一篇以上的文章。
我的问题是我应该在它们之间使用哪种关系。我不知道使用数据透视表article_image (belongsToMany) 是否会更好,或者我是否使用其他类型的关系做得很好。那样的话……那样就好了?:
ImageModel.php
public function article()
{
return $this->hasMany('Article', 'article_id');
}
ArticleModel.php
public function image()
{
return $this->hasMany('Image', 'image_id');
}
编辑:
那么,如果我使用数据透视表...我应该在数据透视表中使用一些额外的列吗?喜欢...
$table->increments('id');
$table->integer('article_id')->unsigned()->index();
$table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade');
$table->integer('image-1')->unsigned()->index();
$table->foreign('image_id')->references('id')->on('images')->onDelete('cascade');
$table->integer('image-2')->unsigned()->index();
$table->foreign('image_id')->references('id')->on('images')->onDelete('cascade');
...
$table->timestamps();
我想我应该删除onDelete('cascade')以避免删除图片时丢失我的文章?
编辑 2:
在我的控制器中,我以这种方式保存图像:
if(Session::get('imagen_1')){
$imagen = new Imagen;
$imagen->url = Session::get('imagen_1');
$imagen->user_id = Sentry::getUser()->id;
$imagen->save();
Session::forget('imagen_1');
}
然后,我创建我的article(我称之为“actividad”)
$actividad = new actividad;
$actividad->titulo = Input::get('titulo');
$actividad->actividad = Input::get('actividad');
(...)
$actividad->slug = Str::slug(Input::get('titulo'));
$actividad->user_id = Sentry::getUser()->id;
$actividad->save();
最后,我尝试保存两者之间的关系:
$actividad->imagens()->sync($imagen);
但它不起作用...我收到下一条错误消息:
参数 1 传递给 Illuminate\Database\Eloquent\Relations\BelongsToMany::formatSyncList() 必须是数组类型,给定对象,调用 /Applications/XAMPP/xamppfiles/htdocs/webs/lara4/edu1/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php 在第 578 行并定义
【问题讨论】:
-
不要那样做。你最终会在文章上看到几个
belongsTo,在图片上看到几个hasMany。创建数据透视表并改用belongsToMany,这正是您需要的。 -
我会考虑您是否要搜索具有特定图像的帖子。这不是一个非常常见的用例。如果不是,那么只有文章的单向关系有很多图像。如果您确实需要另一种关系(图片->文章),那么正如 Jarek_Tkaczyk_deczo 所说,使用数据透视表在两种关系上都属于多个。
-
@JarekTkaczyk_deczo_ 我已经编辑了我的问题。请问有什么建议吗?
标签: laravel-4 relationship has-many has-and-belongs-to-many