Php 拉雷维尔雄辩的多对多连接
我是新来的拉威尔,并试图建立一个相册与它。 我的问题是,我使用attach函数将用户id和组id插入到我的数据库中,它工作正常,但在文档中提到了attach函数 例如,您希望附加到用户的角色可能已经存在 存在。只需使用“附加”方法: 所以我想用同样的方法使用它,如果Php 拉雷维尔雄辩的多对多连接,php,mysql,laravel,Php,Mysql,Laravel,我是新来的拉威尔,并试图建立一个相册与它。 我的问题是,我使用attach函数将用户id和组id插入到我的数据库中,它工作正常,但在文档中提到了attach函数 例如,您希望附加到用户的角色可能已经存在 存在。只需使用“附加”方法: 所以我想用同样的方法使用它,如果相册id已经存在,只需更新它,或者插入新的,但我的问题是它总是会插入,它不会检查相册id是否已经存在 我的模型 class User extends Eloquent { public static $timestamps
相册id
已经存在,只需更新它,或者插入新的,但我的问题是它总是会插入,它不会检查相册id
是否已经存在
我的模型
class User extends Eloquent
{
public static $timestamps = false;
public function album()
{
return $this->has_many_and_belongs_to('album', 'users_album');
}
}
后功能
public function post_albums()
{
$user = User::find($this->id);
$album_id = Input::get('album');
$path = 'addons/uploads/albums/'.$this->id.'/'. $album_id . '/';
$folders = array('path' => $path, 'small' => $path. 'small/', 'medium' => $path. 'medium/', );
if (! is_dir($path) )
{
foreach ($folders as $folder)
{
@mkdir($folder, 0, true);
}
}
$sizes = array(
array(50 , 50 , 'crop', $folders['small'], 90 ),
array(164 , 200 , 'crop', $folders['medium'], 90 ),
);
$upload = Multup::open('photos', 'image|max:3000|mimes:jpg,gif,png', $path)
->sizes( $sizes )
->upload();
if($upload)
{
$user->album()->attach($album_id);
return Redirect::back();
}
else
{
// error show message remove folder
}
}
有人能指出我做错了什么吗?或者我完全误解了附加功能?我相信您误解了附加功能。同步功能使用“附加”来添加关系,但仅当关系不存在时才使用。按照上面的操作,我建议拉一个id列表,然后只在列表中不存在的情况下插入
$current = $user->album()->lists( 'album_id' );
if ( !in_array( $album_id, $current ) )
{
$user->album()->attach( $album_id );
}
另一方面,我建议您遵循laravel的默认命名约定。关系方法应该是$user->albums(),因为其中有很多。数据透视表也应命名为“album_user”。你以后会感谢你自己的。谢谢@Collin我注意到我误解了我昨天的支票
$album = $user->album()->where_album_id($album_id)->get();
if(empty($album))
{
$user->album()->attach($album_id);
}
laravel集合提供了一个非常有用的方法“contains”。它确定集合中是否存在密钥。您可以使用$user->album
获取案例中的收藏。你可以注意到这张专辑没有妄想症的区别
工作代码
现在您所要做的就是使用contains
方法。完整的代码将被删除
if (!$user->album->contains($album_id)
{
$user->album()->attach($album_id);
}
这是获得所需解决方案的更为干净和“Laravel”的方式。顺便问一下:您发布的链接如何?对于那些对Laravel感兴趣的人来说,这只是一个指向Laravel Stack Exchange提案的链接。这很方便,但从数据库中为用户提取所有相册的完整详细信息似乎是浪费。您只想知道特定相册是否属于该用户。