MySql Update Query для вставки значений JSON - PullRequest
0 голосов
/ 26 июня 2018

В MySql у меня есть две таблицы: staff и certifications.Существует отношение один-ко-многим, где staff.pk = certifications.fk.

Для каждого сотрудника мне нужно вставить несколько значений certifications.name в столбец JSON в таблице staff.

Мне также нужно иметь возможность читать это как массив, приведенный в Laravel - означает ли это, что это должен быть массив JSON, а не объект JSON?

ОБНОВЛЕНИЕ:

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

1 Ответ

0 голосов
/ 26 июня 2018

Вы можете использовать аксессоры и мутаторы

namespace App;
use Illuminate\Database\Eloquent\Model;

class Staff extends Model
{
    //assuming you have certificates column in staff table to store json data

    public function setCertificatesAttribute($certificates)
    {
        $this->attributes['certificates'] = json_encode($certificates);
    }

    public function getCertificatesAttribute()
    {
        if($certificates != null){
           return json_decode($certificates, true); //force to array
        }

        return []; //default empty array
    }
}

Теперь, если вы создаете или обновляете персонал

Staff::create([
     'name' => 'Staff1',
     'certificates' => ['certificate1', 'certificate2'] 
]);

Тогда он будет автоматически сохранен в виде данных JSON в вашей штатной таблице. И когда вы извлекаете данные, используя $staff->certificates, он возвращает вам массив.

надеюсь, что это может решить вашу проблему

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