laravel - 将现有记录附加到 Eloquent hasMany/belongsTo 关系

标签 laravel laravel-5 eloquent

我有一个模型 SalesArea其中有很多 Regions . Regions属于一个SalesArea .

class SalesArea extends Model
{
    public function regions() {
        return $this->hasMany('App\Region');
    }
}

class Region extends Model
{
    public function sales_area() {
        return $this->belongsTo('App\SalesArea');
    }
}

由于组织中的一些更改,在创建区域后正在创建父级 (SalesArea)。创建销售区域记录时,我试图将区域与其关联的销售区域相关联。

我创建了一个迁移以将 sales_area_id 添加到 regions表,它们目前都为空。

我有一个选择框,其中包含区域的各种 ID,我想立即将区域与销售区域与一组 id 相关联。所有关联方法都不起作用。

$area = SalesArea::create($request->all());

$area->regions()->attach([1,2,3]); // BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::attach()

$area->regions()->add([1,2,3]); // BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::add()'

$area->regions()->sync([1,2,3]); // BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::sync()'

$area->regions()->associate([1,2,3]); // BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::associate()'

我对这应该如何工作感到困惑。区域已经存在,我只需要将它们的关系添加到它们关联的销售区域。

最佳答案

public function store(Request $request)
{
    $this->validate($request, [
       'name' => 'required|unique:sales_areas',
       'regions' => 'required|array',
       'regions.*' => 'int',
    ]);

    $salesArea = SalesArea::create($request->all());

    // Because we have a hasMany not a many to many, we have to do it this way
    Region::whereIn('id', $request->regions)->update(['sales_area_id' => $salesArea->id]);

    flash('Created Sales Area ' . $salesArea->name);
    return redirect()->route('areas.index', $salesArea->id);
}

关于laravel - 将现有记录附加到 Eloquent hasMany/belongsTo 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50992388/

相关文章:

mysql - 将数组存储在数据库中

php - Laravel - 找不到关系时用空数组替换 null

Laravel 6 Passport CSRF token 不匹配

laravel 5如何添加到子模型类中的$with/$appends字段

php - 在 Laravel 5 中调用模型中的方法

php - 将查询参数添加到 Laravel Controller 中的 url

php - Laravel eloquent 和原始 sql 返回不同的时间戳

javascript - 资源解释为文档,但使用 MIME 类型 application/json,laravel 进行传输

laravel - 使用 Eloquent 手动注入(inject)模型关系

laravel - 需要安装 League/flysystem-aws-s3-v3 联盟/flysystem ^2.0 但卡在 1.1.3 时出现问题