如果我尝试保存外键,那么我的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 :(得分: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
答案 1 :(得分:0)
查询模型应具有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);