2017-08-07 131 views
0

不知何故,我的laravel關係不起作用,如果我試圖保存我的外鍵保持爲空。Laravel外鍵爲空

客戶遷移

Schema::create('clients', function(Blueprint $table) 
{ 
    $table->increments('id'); 
    $table->string('name'); 
    $table->string('email')->unique(); 
    $table->string('password'); 
    $table->rememberToken(); 
    $table->timestamps(); 
}); 

查詢遷移

Schema::create('inquiries', function(Blueprint $table) 
{ 
    $table->increments('id'); 
    $table->unsignedInteger('client_id')->nullable(); 
    $table->unsignedInteger('device_id')->nullable(); 
    $table->string('android_device_token')->default(''); 
    $table->integer('status')->default(0); 
    $table->timestamps(); 
    $table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade'); 
    $table->foreign('device_id')->references('id')->on('devices')->onDelete('cascade'); 
}); 

試圖把這些請求和保存這樣的,但數據庫不斷顯示我空

$data = array(
    "device_id" => $request->input('device_id'), 
    "client_id" => Client::find($request->input('client_id'))->id, 
    "android_device_token" => $inquiry->android_device_token, 
    "status" => $request->input('status') 
); 
$inquiry->fill($data); 
$inquiry->save(); 

模型關係:

查詢:

public function client() 
{ 
    return $this->hasOne(Client::class); 
} 

客戶:

protected $table = 'inquiries'; 
protected $fillable = ['client_id', 'device_id', 'android_device_token', 'status']; 

public function inquiry() 
{ 
    return $this->hasMany(Inquiry::class); 
} 
+0

,你能否告訴我們'Inquiry'模型? –

+0

你的$ $查詢有什麼? – PaladiN

+0

@ArigiWiratama確定我在 – junikear

回答

1

好吧,我知道問題出在你的模型和控制器的問題。

這裏是我的代碼:

Client.php

public function inquiries() { 
    // if the relation is one to many 
    return $this->hasMany(Inquiry::class); 

    // if th relation is one to one 
    return $this->hasOne(Inquiry::class); 
} 

Inquiry.php

public function client() { 
    // It should use belongsTo 
    return $this->belongsTo(Client::class); 
} 

而在你的控制應該是:

控制器

$client = Client::find($request->input('client_id')); 
$inquiry = new Inquiry; 
$data = array(
    "device_id" => $request->input('device_id'), 
    "android_device_token" => $inquiry->android_device_token, 
    "status" => $request->input('status') 
); 
$inquiry->fill($data); 
$inquiry->client()->associate($client); // set the foreign key 
$inquiry->save(); // save the inquiry 

編輯: 如果造成補法。我想在你的控制器,你應該把它改成這樣:

// Get the client 
$client = Client::find($request->input('client_id')); 

// Initiate the Inquiry model; 
$inquiry = new Inquiry; 
$inquiry->device_id = $request->input('device_id'); 
$inquiry->android_device_token = $inquiry->android_device_token; 
$inquiry->status = $request->input('status'); 
$inquiry->client()->associate($client); 
$inquiry->save(); 

希望它可以幫助你:d

+0

sry沒有工作 – junikear

+0

調用undefined method associate – junikear

+0

對不起,我應該使用'$ query'來關聯'$ client'。看看我的編輯 –

0

詢問模型應該有屬於關聯關係:

詢問模型關係:

public function client() 
{ 
    return $this->belongsTo(Client::class); 
} 

該客戶機模型的關係:

你210
public function inquiries() 
{ 
    return $this->hasMany(Inquiry::class); 
} 

也可以使用save方法上的關係,爲了節省查詢:

$client = Client::find($request->input('client_id')); 

$inquiry = new Inquiry(); 
$inquiry->fill(array(
    "device_id" => $request->input('device_id'), 
    "android_device_token" => $inquiry->android_device_token, 
    "status" => $request->input('status') 
)); 
$client->inquiries()->save($inquiry); 
+0

之上加上了sry沒有工作 – junikear