我是laravel的新手,并试图用它制作相册。 我的问题是我使用attach函数将用户ID和组ID插入到我的数据库中,它可以正常工作,但在文档中它说的是关于附加功能
例如,您可能希望将该角色附加到用户 存在。只需使用attach方法:
所以我想以同样的方式使用它,如果album_id
已经存在只是更新它,其他明智的插入新的一个,但我的问题是它总是insters,它不检查是否{{1已经存在
我的模特
album_id
发布功能
class User extends Eloquent
{
public static $timestamps = false;
public function album()
{
return $this->has_many_and_belongs_to('album', 'users_album');
}
}
可以请某人指出我做错了什么?或者我完全误解了附加功能?
答案 0 :(得分:6)
我相信你误解了附加功能。同步功能使用附加来添加关系,但前提是该关系尚不存在。按照那里所做的,我建议拉一个id列表,然后只插入列表中尚不存在的内容。
$current = $user->album()->lists( 'album_id' );
if ( !in_array( $album_id, $current ) )
{
$user->album()->attach( $album_id );
}
在旁注中,我建议您遵循laravel的默认命名约定。关系方法应该是$ user-> albums(),因为它们中有很多。数据透视表也应命名为“album_user”。你以后会感谢自己。
答案 1 :(得分:2)
<强> Contains method of Laravel Collections 强>
laravel集合提供了一种非常有用的方法'contains'。它确定集合中是否存在密钥。您可以使用$user->album
在您的案例中获取该集合。你可以注意到专辑没有副作用的区别。
工作代码
现在你所要做的就是使用contains
方法。完整的代码将是。
if (!$user->album->contains($album_id)
{
$user->album()->attach($album_id);
}
它更清洁,更'Laravel'的方式来获得所需的解决方案。
答案 2 :(得分:1)
谢谢@Collin我注意到我误解了我昨天做了我的支票
$album = $user->album()->where_album_id($album_id)->get();
if(empty($album))
{
$user->album()->attach($album_id);
}