Обновить несколько таблиц с Laravel - PullRequest
0 голосов
/ 10 мая 2018

Мне нужно обновить несколько таблиц в одном запросе ... Для этого я создаю метод, в котором я написал:

$sector = Sector::where('sectors.id', '=', $id)
    ->join('valuechains', 'sectors.id', '=', 'valuechains.sector_id')
    ->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
    ->join('segments', 'valuechains.id','=', 'segments.valuechain_id')
    ->join('lang_segment', 'segments.id', '=', 'lang_segment.segment_id')
    ->join('keyneeds', 'segments.id', '=', 'keyneeds.segment_id')
    ->join('keyneed_lang', 'keyneeds.id', '=', 'keyneed_lang.keyneed_id');
 $sector->update(
    ['sectors.deleted_at' =>  Carbon::now()],
    ['lang_sector.deleted_at'  => Carbon::now()],
    ['valuechains.deleted_at' => Carbon::now()],
    ['lang_valuechain.deleted_at' => Carbon::now()],
    ['segments.deleted_at' => Carbon::now()],
    ['lang_segment.deleted_at' => Carbon::now()],
    ['keyneeds.deleted_at' => Carbon::now()],
    ['keyneed_lang.deleted_at' => Carbon::now()]
);

К сожалению, у меня появляется сообщение об ошибке: updated_at:

SQLSTATE [23000]: Нарушение ограничения целостности: 1052 Champ: «updated_at» список полей dans est ambigu (SQL: обновление sectors внутреннее объединение valuechains в sectors. id = valuechains. sector_id внутреннееобъединение lang_valuechain в valuechains. id = lang_valuechain. valuechain_id внутреннее объединение segments в valuechains. id = segments. valuechain_id внутреннее объединение lang_segment в segments. id = lang_segment. segment_id внутреннее объединение keyneeds в segments. id = keyneeds. segment_id внутреннее объединение keyneed_lang в keyneeds. id = keyneed_lang. keyneed_id set sectors. deleted_at = 2018-05-10 17:54:51, updated_at = 2018-05-10 17:54:51 где sectors. id = 2 и sectors. deleted_at равно нулю)

1 Ответ

0 голосов
/ 10 мая 2018

Похоже, что вы пытаетесь делать каскадное мягкое удаление. Возможно, вы захотите исследовать использование пакета, чтобы упростить это, вы можете проверить пакет, чтобы достичь этого здесь . Вот пример кода из документации:

<?php

namespace App;

use App\Comment;
use Iatstuti\Database\Support\CascadeSoftDeletes;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model
{
    use SoftDeletes, CascadeSoftDeletes;

    protected $cascadeDeletes = ['comments'];

    protected $dates = ['deleted_at'];

    public function comments()
    {
        return $this->hasMany(Comment::class);
    }
}

В качестве альтернативы я бы порекомендовал сделать это необработанным запросом, поскольку я не думаю, что QueryBuilder подходит для такого типа ситуаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...