我正在研究 laravel 5.2,也是 laravel 的初学者。我在数据库中有users
和clients
表。 user
客户端表的字段存储id column(primary key) of users table
的值。即,一个用户有多个客户端,一个客户端属于一个用户。现在来找问题。当我要插入登录用户的新客户端时,出现错误。没有任何错误消息。我搜索并了解到,也许这是因为外键列名称是user
,而不是user_id
。所以我将我的客户端模型从 return $this->belongsTo('App'User');
更新为 return $this->belongsTo('App'User', 'user');
.但还是失败了。如果有人知道答案,将不胜感激。这是我的代码。
客户端控制器(尝试 1)
$request->user()->clients()->create([
'user' => $request->user()->id,
'email' => $request->email,
'age' => $request->age
]);
客户端控制器(尝试 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');
}
}
对不起,你们的关系是错误的。 此外,您正在使用
$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
]);
尝试将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
]);
}
问题已解决
问题解决了,因为我必须在客户端模式下编写public $timestamps = false;
。之后,我不需要手动插入user
值。因为 laravel 自己正在执行该任务,因为我在用户和客户端模型关系中写入了外键。即手动return $this->hasMany('App'Client', 'user')
和return $this->belongsTo('App'User', 'user')
。
我不明白我应该为拉拉维尔的这个功能做些什么。我应该哭还是笑?