пустая строка из БД в нуль ??? if ($ var === null) {оператор} - PullRequest
0 голосов
/ 02 февраля 2020

Я проверяю БД, если есть запись. и если нет никакого перекодирования, я хочу сделать его. Но я не могу получить NULL из БД, я получил пустую строку. Как я могу решить это?

public function chechk_slots(){
    $character_id = Auth::user()->id;
    $inv_user = DB::table("slots")->where('character_id', $character_id)->get();
    return $inv_user?? null ;
}

и

public function to_inventary()
{

    $a = "Is record";
    $b = "there is no record";

    $character_id = Auth::user()->id;
    $inv_items = DB::table("items_chars")->where('character_id', $character_id)->get();
    $user_profile = $this->show_profile();
    $slot = $this->chechk_slots();
    //dd($slot);
    //DB::table("slots")->insert(['character_id' => $character_id]);
   // dd($slot[0]->character_id);
    if($slot === null){
        dd($b);
        DB::table("slots")->insert(['character_id' => $character_id]);
    }
    else{
        dd($a);
    }
    //return view('inventary', compact('user_profile', 'inv_items'));
}

моя таблица в БД pi c enter image description here Нет записи, если я dd ($ slot); я получил этот пи c enter image description here

пустая строка! = ноль и я не могу получить запись ... Как я могу изменить это?

Ответы [ 3 ]

0 голосов
/ 02 февраля 2020

Выпуск № 1 - Коллекция

Вы получите коллекцию, даже если у нее нет данных.

$inv_user = DB::table("slots")->where('character_id', $character_id)->get();

Выпуск № 2 - Объединение нулей

Это похоже на троичный оператор, но будет вести себя как isset в левом операнде, а не просто использовать его логическое значение.

$inv_user = DB::table("slots")->where('character_id', $character_id)->get();

return $inv_user ?? null;

$inv_user назначено Illuminate\Support\Collection.


Решение

Используйте count() и троичный оператор.

public function chechk_slots(){
    $character_id = Auth::id();
    $inv_user = DB::table("slots")->where('character_id', $character_id)->count();

    return $inv_user ?: null ;
}
0 голосов
/ 02 февраля 2020

Я думаю, если вы хотите получить нулевое значение из запроса, просто используйте first () вместо get () и верните результат в одну строку

return DB::table("slots")->where('character_id', $character_id)->first();
0 голосов
/ 02 февраля 2020

Вы можете использовать красноречивую функцию laravel firstOrCreate или firstOrNew.

. Она будет проверять записи в БД на основе запроса, если найдет, вернет или вставит. Если вы не хотите, вставьте новую или верните эту запись. Вы также можете использовать updateOrCreate.

Ссылаться на это больше: Laravel Различные методы создания

Надеюсь, это поможет:)

...