通过laravel中的关系获取已删除的值

时间:2014-08-08 13:35:28

标签: php mysql laravel relation

我有3个表:vehiclesdriversvehicle_driver_owners

drivers表包含所有已注册的驱动程序。 vehicles表包括所有注册的车辆。 vehicle_driver_owners是一个数据透视表。它显示哪些驾驶员充当特定车辆的所有者。 (车辆可以有多个车主,反之亦然)

我在所有3个模型中建立了关系(VehicleDriverVehicleDriverOwner

这是车辆型号

use Illuminate\Database\Eloquent\SoftDeletingTrait;

class Vehicle extends Eloquent {

    use SoftDeletingTrait;
    protected $table = 'vehicles';
    protected $softDelete = true;

    // EACH VEHICLE CAN BELONG TO MANY OWNERS
    public function owners(){
        return $this->belongsToMany('Driver', 'vehicle_driver_owners', 'vehicle_driver_owners_vehicle_id', 'vehicle_driver_owners_driver_id');
    }
}

这是Driver模型

class Driver extends Eloquent{      
    protected $table = 'drivers'

   //EACH DRIVER CAN BE OWNER OF MANY VEHICLES
    public function vehicleOwner(){
        return $this->belongsToMany('Vehicle', 'vehicle_driver_owners', 'vehicle_driver_owners_driver_id', 'vehicle_driver_owners_vehicle_id');
    }
}

这是VehicleDriverOwner模型

use Illuminate\Database\Eloquent\SoftDeletingTrait;

class VehicleDriverOwner extends Eloquent {
    use SoftDeletingTrait;
    protected $table = 'vehicle_driver_owners';
    protected $fillable = ['vehicle_driver_owners_vehicle_id', 'vehicle_driver_owners_driver_id'];
    protected $softDelete = true;       
}

我试图使用laravel的softDelete功能。一辆车有3个车主,我想删除其中一个。我还想在数据库中保留该条目。所以我使用了softDelete功能。删除该特定所有者后,deleted_at表格中该行的vehicle_driver_owners列已填充日期。

但现在我正试图使用​​Vehicle::find(5)->owners查看车辆所有者。它显示已删除的所有者

1 个答案:

答案 0 :(得分:0)

将whereNull(' vehicle_driver_owners.deleted_at')添加到Vehicle中的函数所有者

use Illuminate\Database\Eloquent\SoftDeletingTrait;
class Vehicle extends Eloquent {

    use SoftDeletingTrait;
    protected $table = 'vehicles';
    protected $softDelete = true;

    // EACH VEHICLE CAN BELONG TO MANY OWNERS
    public function owners(){
        return $this->belongsToMany('Driver', 'vehicle_driver_owners', 'vehicle_driver_owners_vehicle_id', 'vehicle_driver_owners_driver_id')
                    ->whereNull('vehicle_driver_owners.deleted_at');
    }
}