2017-02-07 13 views
1

私はLaravel 5.2を使用しており、以下のように1対1の関係を作成しました。Laravelで1対1の関係を削除する

$driver = Driver::find($driver->id); 
$vehicle = Vehicle::find($vehicleId); 
$vehicle->driver()->associate($driver); 
$vehicle->save(); 

これは完全に機能します。いくつかのシナリオでは、特定のドライバーを車両から取り外すことによってこの関係を解消する必要があります。

$driver = Driver::find($driver->id); 
$vehicle = Vehicle::find($vehicleId); 
$vehicle->driver_id->NULL; 
$vehicle->save(); 

しかし、これは機能しません。私は他のアプローチを試みました。

$vehicle->driver()->delete(); 

$vehicle->driver()->dissociate(); 

次の2つのモデルがあります。

class Driver extends Model 
{ 
    public function vehicle() 
    { 
     return $this->hasOne(Vehicle::class); 
    } 
} 

class Vehicle extends Model 
{ 
    protected $primaryKey = 'vehicle_number'; 
    public $incrementing = false; 

    public function driver() 
    { 
     return $this->belongsTo(Driver::class); 
    } 
} 

私の場合は何も働いていません。誰もがヒントを教えてください、そこに何が間違っていますか?

+0

$ veh icle-> driver() - > delete();リレーションではなくドライバを削除します –

+0

両方のモデルのコードを提供します – KuKeC

+0

@KuKeC質問に追加されました。 – Shashika

答えて

0

私はあなたが必要だと思う:

$vehicle->driver_id = NULL; 
$vehicle->save(); 
+0

私は試しました。しかし、これも動作していません – Shashika

+0

@Shashika、あなたの答えでは - '$ vehicle-> driver_id-> NULL;'。それが本当の場合、あなたは間違った試みをしました。 – maximkou

+0

セーブコールからの戻り値をvar_dumpすると、trueまたはfalseが返されますか?また@Shashika、あなたの質問からあなたの車両モデルはID列を持っていないのですか?主キーをvehicle_numberに設定したようです。 – Christian

0

あなたは車とドライバー間の外部キーを使用している場合は、あなただけの子テーブルのエントリを削除するか、参照Null.IsがNULL可能driver_idにする必要があります。 移行時に試してみてください $ table-> integer( 'driver_id') - > unsigned() - > nullable() - > default(null); これがあなたの問題を解決することを願っています。

+0

$ table-> integer( 'driver_id') - > unsigned() - > nullable();これは私がマイグレーションで持っているものです – Shashika

0

私はあなたがデータに

$driver = Driver::find($driver->id); 
$vehicle = Vehicle::find($vehicleId); 
$vehicle->driver()->associate($vehicle); 
$vehicle->save(); 

を挿入すると間違っていたと思いますまず第一にあなたのモデルは

class Driver extends Model 
{ 
    public function vehicle() 
    { 
     return $this->belongsTo(Vehicle::class); 
    } 
} 

class Vehicle extends Model 
{ 
    protected $primaryKey = 'vehicle_number'; 
    public $incrementing = false; 

    public function driver() 
    { 
     return $this->hasOne(Driver::class); 
    } 
} 

以下のようにそれを試してみて、私に知らせてしなければならない

$driver = Driver::find($driver->id); 
$vehicle = Vehicle::find($vehicleId); 
$vehicle->driver()->associate($driver); 
$vehicle->save(); 

する必要がありますそれがあなたを助けたら

+0

申し訳ありませんが、私が質問を書いた時、それは私のせいです。私の関係性の向上はうまくいきます。 – Shashika

+0

@Shashikaあなたのモデルの関係も編集しました。この更新を行い、まだエラーが発生した場合にお知らせください – KuKeC

+0

これは動作しません。私はそのような方向で関係の方向性が必要です。 – Shashika