Как проверить значение этого столбца таблицы $ значение имеет значение $ в другом столбце таблицы в laravel

#laravel

#laravel

Вопрос:

Это light таблица моего участника

0 означает отсутствие света, 1 означает, что свет включен

 |id| sx_ID | gylight| 
---------------------
|1 |SX00001|    0   |
|2 |SX00002|    1   |
|3 |SX00003|    1   | 
---------------------
  

Это моя gylight таблица

Когда участник покупает источник света, он сохраняет sx_ID и другое значение в gylight таблице. Далее, один участник может купить более одного источника света.

 |id| sx_ID | gylight_number| 
----------------------------
|1 |SX00002|    A1         |
|2 |SX00002|    A15        |
|3 |SX00003|    A78        | 
----------------------------
  

Это мой контроллер функции удаления

Когда администратор удаляет неправильную запись или старую запись, gylight столбец в light таблице должен быть обновлен 0 . Но это кодирование приведет gylight к прямому превращению 0 , даже если у участника все еще был другой свет. Как я могу написать код для проверки таблицы light sx_ID , имеет ли она значение sx_ID in the gylight table или другие методы.

 public function del(Request $request)
{   
    Guanyin::find($request->id)->delete();

    Light::where('sx_ID','=',$request->sx_ID)
           ->update(['gylight' => 0]);
    
    return response()->json();
}
  

Ответ №1:

Если вы используете Eloquent, попробуйте это:

Легкая модель

 public function guanyins()
{
    return $this->hasMany(Guanyin::class, 'sx_ID')
}
  

Модель Гуаньинь

 public function light()
{
    return $this->belongsTo(Light::class, 'sx_ID');
}
  

Контроллер Guanyin

 public function del(Request $request)
{   
    Guanyin::find($request->id)->delete();

    Light::where('sx_ID', '=', $request->sx_ID)
           ->whereDoesntHave('guanyins')
           ->update(['gylight' => 0]);
    
    return response()->json();
}
  

Комментарии:

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

2. @JeremyYx Моя ошибка, если использовать whereDoesntHave(), что означает, что нет Гуаньинь, можно найти по sx_ID легкого результата.

3. это работает! Но light модель должна быть return $this->hasMany(Guanyin::class, 'sx_ID', 'sx_ID');

Ответ №2:

Вы можете использовать Observer, чтобы сделать это автоматически, поэтому вам не нужно делать это вручную, он автоматически обновит индикатор всякий раз, когда Гуаньинь был удален

Легкая модель

 public function guanyins()
{
    return $this->hasMany(Guanyin::class, 'sx_ID')
}
  

GuanyinModel

 
use AppObserversGuanyinObserver;

public function light()
{
    return $this->belongsTo(Light::class, 'sx_ID');
}

public static function boot()
{
    parent::boot();
    Guanyin::observe(GuanyinObserver::class);
}
  

GuayinController

 public function delete(Request $request)
{   
    $guanyin = Guanyin::findOrFail($request->id);
    $guanyin->delete();
    return response()->json();
}
  

И для создания наблюдателя вы можете выполнить эту команду:

 php artisan make:observer GuanyinObserver --model=Guanyin
  

ссылка : https://laravel.com/docs/8.x/eloquent#observers

GuanyinObserver и ваш код наблюдателя будут выглядеть следующим образом:

 <?php

namespace AppObservers;

use AppGuanyin;

class GuanyinObserver
{
     /**
     * Handle the guanyin "deleted" event.
     *
     * @param  AppGuanyin  $guanyin
     * @return void
     */
     public function deleted(Guanyin $guanyin)
     {
        $light = $guanyin->light;
        if($light->guanyins->count() == 0) {
             $light->gylight = 0;
             $light->update();
        }
     }
}
  

и все готово, теперь всякий раз, когда гуаньинь удаляется, он автоматически проверяет наличие света, подсчитывает его гуаньинь, если count равно 0, он переключает подсветку на 0
. вы также можете применить это к созданному методу в observer, чтобы изменять подсветку на 1 при создании гуаньинь

Комментарии:

1. Привет, я пытаюсь использовать эту кодировку, но вижу, что она не работает. Поскольку я все еще новичок в laravel, возможно, я недостаточно хорошо знаю эту часть

2. @JeremyYx пожалуйста, обратитесь к правке, которую я сделал выше в коде GuanyinModel