簡體   English   中英

Laravel外鍵為空

[英]Laravel foreign key is null

如果我嘗試保存我的外鍵,我的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');
});

試圖像這樣放置請求並保存它,但是數據庫不斷向我顯示null

$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);
}

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

這是我的代碼:

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

查詢模型應該具有belongsTo關系:

查詢模型關系:

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

客戶模型關系:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM