【问题标题】:laravel seeder doesn't perform conditionlaravel 播种机不执行条件
【发布时间】:2021-11-14 05:30:40
【问题描述】:

我正在尝试向名为“hasAddresses”的区域表添加一个新的布尔字段,如果该区域至少存在 1 个地址,则该字段应为 true,否则应为 false。

问题 - 它将所有字段更改为 true

class AddhasAdressesSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $addressesareasIds=Address::get('areaId');
        $areas=Area::get();

        foreach ($areas as $area){
            $area=Area::get('id');
            $exists=Address::exists($addressesareasIds,$area);
            if($exists)
            DB::table('areas')->update([
                'hasAddresses' => true
            ]);
        }

    
    }
}

【问题讨论】:

  • 您可能正在寻找 whereExists 来查询关系laravel.com/docs/8.x/queries#where-exists-clauses
  • 如果您定义了关系,那么您的查询可能会简化为 Area::has('address')->update([ 'hasAddresses' => true ]) 而不是整个代码

标签: laravel laravel-seeding


【解决方案1】:

确保你在你的区域模型上有一个关系

//Area.php
public function addresses()
    {
        return $this->hasMany(Address::class);
    }

然后在你的播种机中使用它

    {
        $areas=Area::whereHas("addresses")->update("hasAddresses",true);    
    }

【讨论】:

    猜你喜欢
    • 2022-11-27
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2023-01-12
    • 2018-12-27
    相关资源
    最近更新 更多