Php Laravel外键为空

Php Laravel外键为空,php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,不知何故,如果我试图保存外键,我的laravel关系就不起作用了 客户端迁移 Schema::create('clients', function(Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table-&

不知何故,如果我试图保存外键,我的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');
});
查询迁移

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

查询模型应具有以下关系:

public function client()
{
    return $this->belongsTo(Client::class);
}
public function inquiries()
{
    return $this->hasMany(Inquiry::class);
}
查询模型关系:

public function client()
{
    return $this->belongsTo(Client::class);
}
public function inquiries()
{
    return $this->hasMany(Inquiry::class);
}
客户机模型关系:

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

好的,我知道你的模型和控制器的问题

这是我的密码:

Client.php

公共功能查询(){
//如果关系是一对多
返回$this->hasMany(查询::类);
//如果这个关系是一对一
返回$this->hasOne(查询::类);
}
Inquiry.php

公共功能客户端(){
//它应该使用belongsTo
返回$this->belongsTo(客户机::类);
}
控制器中应包括:

控制器

$client=client::find($request->input('client_id');
$inquiry=新查询;
$data=数组(
“设备id”=>$request->input('device\u id'),
“android\u设备\u令牌”=>$inquiry->android\u设备\u令牌,
“状态”=>$request->input('status')
);
$inquiry->fill($data);
$inquiry->client()->associate($client);//设置外键
$inquiry->save();//保存查询
编辑: 如果它是由填充方法引起的。我认为在控制器中,您应该将其更改为:

//获取客户端
$client=client::find($request->input('client_id'));
//启动查询模式;
$inquiry=新查询;
$inquiry->device_id=$request->input('device_id');
$inquiry->android\u设备\u令牌=$inquiry->android\u设备\u令牌;
$inquiry->status=$request->input('status');
$inquiry->client()->associate($client);
$inquiry->save();

希望它能帮助你:D

你能给我们看一下
查询的模型吗
?你的
$Inquiry
有什么?@ArigiWiratama好的,我在上面添加了它们是你的
查询
模型上必须填写的字段吗?@fubar是的,我在上面添加了它们调用未定义的方法associateAh抱歉我的不好,它应该使用
$inquiry
来关联非
$client
。听着,我的编辑现在客户端id丢失了,我要添加这个吗
“client\u id”=>client::find($request->input('client\u id'))->id,
您不必再次添加
“client\u id”=>client::find()
associate
method将为您填写:我不明白您的最后一个问题。如果你能提出一个新的问题并把它说清楚,那就更好了:)