Laravel 8 - 如何将一个 table 中的值更新为另一个 table

Laravel 8 - How to update the value in one table to another table

很抱歉这个问题可能有点冗长,我想确保我的问题得到彻底解决。

我有一辆 卡车 table 在界面上看起来像这样:

如你所见,我有12、13、15号卡车,这个号可以继续。至于 'Quantity' 列,它表示分配给该特定卡车的包裹数量。 Truck 和 Package table 之间存在一对多关系。一辆卡车可以装很多包裹。一个包裹属于一辆卡车。

存在一个单独的包裹页面,供用户添加新包裹并将包裹分配给特定卡车。这些包裹将自动添加到卡车页面的 'quantity' 列中。

Package页面在界面上是这样的。它仍然是空的,因为还没有记录,这就是我的问题所在。

当用户点击 New Package Details 按钮时,他们将被引导至此:

如您所见,卡车编号显示在下拉菜单中,值取自我们在上面看到的卡车 table。

当用户将新的卡车数据插入卡车 table 时,此创建包的下拉列表应该会自动更新。我将“10”硬编码到菜单中,因为我正在尝试弄清楚如何去做。我们应该在此列表中看到“12”、“13”和“15”。当用户点击卡车编号时,例如“12”,卡车页面内的数量也应该更新。

我的卡车和包裹型号:

class Truck extends Model
{
    use HasFactory;
    protected $primaryKey = 'truck_id';
    protected $fillable = ['truck_number', 'no_of_items', 'postman_name', 'date_of_operation', 'status'];
    
     public function Package()
    {
        return $this->hasMany(Package::class);
    }
}

class Package extends Model
{
    use HasFactory;
    protected $primaryKey = 'package_id';

    protected $fillable = ['truck_number', 'package_number', 'destination', 'date_of_operation'];
    
     public function Truck(){
        return $this->belongsTo(Truck::class);
    }

}

我的迁移文件:

Schema::create('trucks', function (Blueprint $table) {
            $table->increments('truck_id');
            $table->string('truck_number')->unique();
            $table->integer('no_of_items')->nullable();
            $table->string('postman_name');
            $table->date('date_of_operation');
            $table->string('status');
            $table->timestamps();
        });

Schema::create('packages', function (Blueprint $table) {
            $table->increments('package_id');
            $table->string('truck_number')->nullable(); 
            $table->foreign('truck_number')->references('truck_number')->on('trucks');
            $table->string('package_number')->unique();
            $table->string('destination');
            $table->date('date_of_operation');
            $table->timestamps();
        });

包的 create.blade.php 文件:

<form method="post" action="{{ route('package.store') }}">
          @csrf
          <div class="form-group">    
              <label for="truck_number">Truck Number</label>
              <select name="truck_number" class="form-control">
              <option> 10 </option>
              </select>
          </div>
          <div class="form-group">
              <label for="package_name">Package Number</label>
              <input type="text" class="form-control" name="package_number"/>
          </div>
          <div class="form-group">
              <label for="destination">Destination</label>
              <input type="text" class="form-control" name="destination"/>
          </div>
          <div class="form-group">
              <label for="date_of_operation">Date of Operation</label>
              <input type="date" class="form-control" name="date_of_operation"/>
          </div>
          
          <div class="row justify-content-center">
          <a href="{{ route('package.index')}}" class="btn btn-primary bg-danger">Return</a>&nbsp;&nbsp;                        
          <button type="submit" class="btn btn-primary text-center bg-success">Save Details</button>
          </div>
      </form>

包控制器:

public function create()
    {
        $trucks = Truck::all('truck_number');
        return view('package.create')->with('truck_number', $trucks);
    }

 public function store(Request $request)
    {
        //Validate
        $request->validate([
            'truck_number' => 'required',
            'package_number' => 'required|unique:packages',
            'destination' => 'required',
            'date_of_operation' => 'required'
        ]);
        $package = Package::create([
            'truck_number' => $request->truck_number,
            'package_number' => $request->package_number,
            'destination' => $request->destination,
            'date_of_operation' => $request->date_of_operation
        ]);
        return redirect('package');
       
    }

如何将卡车详细信息页面中的truck_number值连接到包裹详细信息[=59]中的truck_number值=] 下拉菜单列表并使下拉列表在每次分配新的 truck_number 时自动更新?

我认为您正在尝试遍历您的卡车 ID 以填充 select HTML 元素。

尝试将您的 blade 更新为此。

<form method="post" action="{{ route('package.store') }}">
          @csrf
          <div class="form-group">    
              <label for="truck_number">Truck Number</label>
              <select name="truck_number" class="form-control">
              @foreach ($truck_number as $number)
                  <option value="{{$number['truck_number']}}">{{$number['truck_number']}}</option>
              @endforeach

              </select>
          </div>
          <div class="form-group">
              <label for="package_name">Package Number</label>
              <input type="text" class="form-control" name="package_number"/>
          </div>
          <div class="form-group">
              <label for="destination">Destination</label>
              <input type="text" class="form-control" name="destination"/>
          </div>
          <div class="form-group">
              <label for="date_of_operation">Date of Operation</label>
              <input type="date" class="form-control" name="date_of_operation"/>
          </div>
          
          <div class="row justify-content-center">
          <a href="{{ route('package.index')}}" class="btn btn-primary bg-danger">Return</a>&nbsp;&nbsp;                        
          <button type="submit" class="btn btn-primary text-center bg-success">Save Details</button>
          </div>
      </form>