Как проверить, существует ли запись и не дублирован ли метод firstOrCreate laravel - PullRequest
0 голосов
/ 02 апреля 2019

Как использовать метод firstOrCreate laravel для ex как этот

у меня есть попытка, как показано ниже, это то, что okey делает это?

$insert[] = [
   'bulan' => $bulan,
   'tahun' => $tahun,
   'nama_pkp'  => $v["nama_pkp"],
   'keterangan'=> $v["keterangan"],
   'no_faktur_pajak'   => $v["no_faktur_pajak"],
   'tgl_faktur_pajak'  => $tgl_faktur_pajak_format,
   'ref'   => $v["ref"],
   'dpp'   => $v["dpp"],
   'ppn'   => $ppn,
   'invoice_no'=> $v["invoice_no"],
   'nama_tenant'   => $v["nama_tenant"],
   'pph_4_deyon'   => $v["pph_4_deyon"],
   'pph_4_tenant'  => $v["ppn"],
   'no_p_l_tenant' => $v["no_potong_dan_lapor_tenant"],
   'bukpot_oleh_tenant'=> $v["bukti_potong_oleh_tenant"],
   'tgl_p_l_penyewa'   => $tgl_p_l_penyewa_format,
   'pph_p_l_tenant'=> $v["pph_potong_dan_lapor_tenant"],
   'note'  => $v["note"],
   'checklist' => $v["checklist"],
   'selisih'   => $selisih,
];

$insertData[] = Data::firstOrCreate($insert);

и у меня есть ошибка, как это

Синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MariaDB

Я добавил код AppServiceProvider

Schema::defaultStringLength(191);

что не так с моим кодом?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Вы передали многомерный массив firstOrCreate,

firstOrCreate () проверяет все присутствующие аргументы, прежде чем найдет совпадение. Если не все аргументы совпадают, то будет создан новый экземпляр модели.

Если вы хотите проверять только определенное поле, тогда используйте firstOrCreate (['field_name' => 'value']) только с одним элементом в массиве. Это вернет первый соответствующий элемент или создаст новый, если не найдено совпадений.

Если вы используете его внутри цикла, тогда так должно быть

foreach ($variable as $v) {
    $insert = [
        'bulan' => $bulan,
        'tahun' => $tahun,
        'nama_pkp'  => $v["nama_pkp"],
        'keterangan'=> $v["keterangan"],
        'no_faktur_pajak'   => $v["no_faktur_pajak"],
        'tgl_faktur_pajak'  => $tgl_faktur_pajak_format,
        'ref'   => $v["ref"],
        'dpp'   => $v["dpp"],
        'ppn'   => $ppn,
        'invoice_no'=> $v["invoice_no"],
        'nama_tenant'   => $v["nama_tenant"],
        'pph_4_deyon'   => $v["pph_4_deyon"],
        'pph_4_tenant'  => $v["ppn"],
        'no_p_l_tenant' => $v["no_potong_dan_lapor_tenant"],
        'bukpot_oleh_tenant'=> $v["bukti_potong_oleh_tenant"],
        'tgl_p_l_penyewa'   => $tgl_p_l_penyewa_format,
        'pph_p_l_tenant'=> $v["pph_potong_dan_lapor_tenant"],
        'note'  => $v["note"],
        'checklist' => $v["checklist"],
        'selisih'   => $selisih,
    ];

    $insertData[] = Data::firstOrCreate($insert);
}

нет другого способа, кроме как перебрать большой массив

0 голосов
/ 02 апреля 2019

Я предполагаю, что вы проверяете все столбцы в базе данных, это должно выглядеть более чисто и аккуратно

$data = Data::firstOrCreate([
       'bulan' => $bulan,
       'tahun' => $tahun,
       'nama_pkp'  => $v["nama_pkp"],
       'keterangan'=> $v["keterangan"],
       'no_faktur_pajak'   => $v["no_faktur_pajak"],
       'tgl_faktur_pajak'  => $tgl_faktur_pajak_format,
       'ref'   => $v["ref"],
       'dpp'   => $v["dpp"],
       'ppn'   => $ppn,
       'invoice_no'=> $v["invoice_no"],
       'nama_tenant'   => $v["nama_tenant"],
       'pph_4_deyon'   => $v["pph_4_deyon"],
       'pph_4_tenant'  => $v["ppn"],
       'no_p_l_tenant' => $v["no_potong_dan_lapor_tenant"],
       'bukpot_oleh_tenant'=> $v["bukti_potong_oleh_tenant"],
       'tgl_p_l_penyewa'   => $tgl_p_l_penyewa_format,
       'pph_p_l_tenant'=> $v["pph_potong_dan_lapor_tenant"],
       'note'  => $v["note"],
       'checklist' => $v["checklist"],
       'selisih'   => $selisih
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...