gpt4 book ai didi

拉拉维尔 5 : How to use firstOrNew with additional relationship fields

转载 作者:行者123 更新时间:2023-12-02 11:15:17 24 4
gpt4 key购买 nike

我有一个 CMS,允许用户保存和创建自行车之旅。每个自行车之旅也有类别,这些类别是使用 Laravel 的多对多关系和中间数据透视表来定义的。在保存游览时,我们不知道该游览是正在编辑的现有游览还是新游览。

认为我应该使用 Laravel 的 firstOrNew 方法来保存游览,并使用 sync 方法来保存类别。然而,所有教程都非常简单地给出了将单个对象传递给函数的示例,如下所示:

$tour = Tour::firstOrNew($attributes);

但是,当我的 $attributes 还包含额外的内容(例如链接到关系表的类别,以及我需要在下一步中保存的类别)时,会发生什么情况?例如this very good tutorial给出以下示例:

$categories = [7, 12, 52, 77];

$tour = Tour::find(2);

$tour->categories()->sync($categories);

但是,如果类别数据与游览其余部分的数据捆绑在一起,并且我需要使用 firstOrNew 来创建游览,而不是使用 find ,会发生什么情况?我应该在实例化游览时将类别保留在 $attributes 中,然后运行 ​​sync,然后在保存游览之前取消设置它们,还是……?有没有更好的方法来实现这一目标?

编辑:需要明确的是,我的示例中的 $attributes 变量本质上是捆绑在一起的游览对象数据 - 正如 Laravel/Eloquent 系统将返回它一样使用belongsToMany 方法从事务中获取 - 并由用户进行后续修改)。即:这是它包含的内容的快照:

array (
'id' => 1,
'uid' => '03ecc797-f47e-493a-a85d-b5c3eb4b9247',
'active' => 1,
'code' => '2-0',
'title' => 'Tour Title',
'url_title' => 'tour_title',
'distance_from' => 20,
'distance_to' => 45,
'price_from' => '135.00',
'price_to' => '425.00',
'created_at' => '2013-12-31 15:23:19',
'updated_at' => '2015-07-24 16:02:50',
'cats' => // This is not a column name!
array (
0 => 1,
1 => 7
),
)

所有这些属性都是我的tours表中的列名,除了cats之外,它通过hasMany关系引用另一个表。在设置此对象类并使用 $tour->save 保存它之前,是否需要手动取消设置?

我正在寻找最干净的最 Laravel 方式来做到这一点?

EDIT2:以下是 Tours 模型中定义的关系:

class Tour extends Model
{

protected $guarded = [];

public function cats(){
return $this->belongsToMany('App\TourCategory', 'tour_cat_assignments', 'tour_id', 'cat_id');
}
}

最佳答案

您需要定义 Tour 模型的 $fillable 属性,以告诉 eloquent 在使用批量分配时要考虑哪些属性,以便它会默默地忽略与类别相关的属性。例如。

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class Tour extends Model {
protected $fillable = ['name'] //... other attributes which are part of this model only and laravel will consider only these attributes and ignore category related attributes which you can consider later use.
}

关于拉拉维尔 5 : How to use firstOrNew with additional relationship fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40911409/

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