如何自动填充 Laravel 5.2 中的外键列值?
How to auto fill foreign key column value in Laravel 5.2?
我正在研究 laravel 5.2,也是 laravel 的初学者。我在数据库中有 users
和 clients
table。 user
客户 table 的字段存储 id column(primary key) of users table
的值。即,一个用户有多个客户端,一个客户端属于一个用户。现在问题来了。当我要插入已登录用户的新客户端时,出现错误。没有任何错误信息。我搜索了一下,发现这可能是因为外键列名是 user
,而不是 user_id
。所以我将我的客户端模型从 return $this->belongsTo('App\User');
更新为 return $this->belongsTo('App\User', 'user');
。但还是失败了。如果有人知道答案,将不胜感激。这是我的代码。
ClientController(尝试 1)
$request->user()->clients()->create([
'user' => $request->user()->id,
'email' => $request->email,
'age' => $request->age
]);
ClientController(尝试 2)
$request->user()->clients()->create([
'email' => $request->email,
'age' => $request->age
]);
客户端模型
namespace App;
use Illuminate\Database\Eloquent\Model;
use App\Ak\Scopes\AgeScope;
class Client extends Model
{
protected static function boot()
{
parent::boot();
static::addGlobalScope(new AgeScope);
}
public function user()
{
return $this->belongsTo('App\User', 'user');
}
}
用户模型
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
protected $fillable = [
'name', 'email', 'password', 'country'
];
protected $hidden = [
'password', 'remember_token',
];
protected $date = ['deleted_at'];
public function client()
{
return $this->hasMany('App\Client', 'user');
}
}
尝试将 protected $fillable = ['email', 'age'];
添加到您的客户端模型。
编辑:
试试这个
路线:
Route::post('user/{user}/client', 'YourController@store');
控制器:
public function store(Request $request, User, $user){
$user->client()->create([
'user' => $request->user()->id,
'email' => $request->email,
'age' => $request->age
]);
}
抱歉,您的关系有误。而且你正在使用
$request->user()->clients()
而不是
$request->user()->client()
你们关系中的客户是单一的。而客户端函数体应该是
return $this->hasMany('App\Client', 'user');
并在您的客户端模型中添加
$fillable = ['email', 'age', 'user'];
并将客户端模型中的用户函数更改为
public function user()
{
return $this->belongsTo('App\User', 'user');
}
orm应该是这样的
$request->user()->client()->create([
'user' => $request->user()->id,
'email' => $request->email,
'age' => $request->age
]);
问题已解决
问题已解决,因为我必须在客户端模式下编写 public $timestamps = false;
。之后,我不需要手动插入 user
值。因为 laravel 自己正在执行该任务,因为我在用户和客户端模型关系中编写了外键。即,手动 return $this->hasMany('App\Client', 'user')
和 return $this->belongsTo('App\User', 'user')
。
我不明白我应该为 laravel 的这个功能做些什么。我该哭还是该笑?
我正在研究 laravel 5.2,也是 laravel 的初学者。我在数据库中有 users
和 clients
table。 user
客户 table 的字段存储 id column(primary key) of users table
的值。即,一个用户有多个客户端,一个客户端属于一个用户。现在问题来了。当我要插入已登录用户的新客户端时,出现错误。没有任何错误信息。我搜索了一下,发现这可能是因为外键列名是 user
,而不是 user_id
。所以我将我的客户端模型从 return $this->belongsTo('App\User');
更新为 return $this->belongsTo('App\User', 'user');
。但还是失败了。如果有人知道答案,将不胜感激。这是我的代码。
ClientController(尝试 1)
$request->user()->clients()->create([
'user' => $request->user()->id,
'email' => $request->email,
'age' => $request->age
]);
ClientController(尝试 2)
$request->user()->clients()->create([
'email' => $request->email,
'age' => $request->age
]);
客户端模型
namespace App;
use Illuminate\Database\Eloquent\Model;
use App\Ak\Scopes\AgeScope;
class Client extends Model
{
protected static function boot()
{
parent::boot();
static::addGlobalScope(new AgeScope);
}
public function user()
{
return $this->belongsTo('App\User', 'user');
}
}
用户模型
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
protected $fillable = [
'name', 'email', 'password', 'country'
];
protected $hidden = [
'password', 'remember_token',
];
protected $date = ['deleted_at'];
public function client()
{
return $this->hasMany('App\Client', 'user');
}
}
尝试将 protected $fillable = ['email', 'age'];
添加到您的客户端模型。
编辑: 试试这个
路线:
Route::post('user/{user}/client', 'YourController@store');
控制器:
public function store(Request $request, User, $user){
$user->client()->create([
'user' => $request->user()->id,
'email' => $request->email,
'age' => $request->age
]);
}
抱歉,您的关系有误。而且你正在使用
$request->user()->clients()
而不是
$request->user()->client()
你们关系中的客户是单一的。而客户端函数体应该是
return $this->hasMany('App\Client', 'user');
并在您的客户端模型中添加
$fillable = ['email', 'age', 'user'];
并将客户端模型中的用户函数更改为
public function user()
{
return $this->belongsTo('App\User', 'user');
}
orm应该是这样的
$request->user()->client()->create([
'user' => $request->user()->id,
'email' => $request->email,
'age' => $request->age
]);
问题已解决
问题已解决,因为我必须在客户端模式下编写 public $timestamps = false;
。之后,我不需要手动插入 user
值。因为 laravel 自己正在执行该任务,因为我在用户和客户端模型关系中编写了外键。即,手动 return $this->hasMany('App\Client', 'user')
和 return $this->belongsTo('App\User', 'user')
。
我不明白我应该为 laravel 的这个功能做些什么。我该哭还是该笑?