gpt4 book ai didi

php - Laravel Eloquent - 多对一关系

转载 作者:行者123 更新时间:2023-11-29 06:02:51 24 4
gpt4 key购买 nike

我有模型:ArtObjects 和照片:

class Photo extends Model
{
protected $fillable = ['caption','description','alternative_text'];

public function artObject()
{
return $this->belongsTo('App\ArtObject');
}
}

class ArtObject extends Model
{

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'title',
'description',
'rating',
'popularity',
'type',
'price'
];

public function photos()
{
return $this->hasMany(ArtObjectPhoto::class);
}
}

Controller :

ArtObject Controller :

public function store(ArtObjectUploadRequest $request)
{
$art_object = ArtObject::create(request(['title', 'description', 'rating', 'popularity', 'type', 'price']));

$this->validate($request, [
'title' => 'required',
'description' => 'required'
]);

foreach ($photo_ids = Input::get('photos') as $photo_id) {

$photo = Photo::find($photo_id);

/*
Problem is here - The user wants to attach the selected photos with
the art-object, ........ Please advise, thanks in anticipation !!!
*/

}

//save the artobject to the database
$art_object->save();

//And redirect to the home page
return redirect('/');
}

问题:用户想要将选定的照片与艺术品一起附加。请注意,照片已存在于数据库中。我尝试了选项 - save()、associate () 但没有任何帮助。我的理解是,一旦我找到 () 照片,它应该给我照片对象,我应该能够用 $art_object 保存 ()。它要我 new() 并从 DB 分配并分配给 Photo 对象。但我不认为这是这样做的正确方法。我相信这不是实现多对关系的最佳方式,那么保存这种关系的最佳方式是什么。请指教,谢谢期待!!!

最佳答案

根据数据库中的多对一关系规则,连接表的外键总是保存在具有“多”关系的表中。

像这里一样,一个 ArtObject 可以有很多照片。所以,那个“很多”表就是照片。您的照片模型必须有一个名为 art_object_id 的属性作为外键。

然后您必须先保存该 ArtObject 对象,并将该对象的 ID 保存在 photos 表中用户选择 ID 的所有行中。

$art_object = ArtObject::create(request(['title', 'description', 'rating', 'popularity', 'type', 'price']));

$this->validate($request, [
'title' => 'required',
'description' => 'required'
]);

//save the artobject to the database
$art_object->save();

foreach ($photo_ids = Input::get('photos') as $photo_id) {

$photo = Photo::find($photo_id);
$photo->art_object_id = $art_object->id;
$photo->save();


}

这样做之后,您可以通过您在Photo模型中定义的方法来获取照片的相关ArtObject,将ArtObject和Photo表关联在一起。您也可以通过ArtObject中定义的方法来获取与ArtObject相关的照片。

在 ArtObject 模型中:-

 public function photos()
{
return $this->hasMany('App\Photo');
}

在照片模型中:-

 public function artObject()
{
return $this->belongsTo('App\ArtObject');
}

关于php - Laravel Eloquent - 多对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43752025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com