我正在开发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');
。但仍然失败了。如果有人知道答案,那么答案将不胜感激。这是我的代码。
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');
}
}
答案 0 :(得分:3)
$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
]);
答案 1 :(得分:0)
尝试将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
]);
}
答案 2 :(得分:0)
问题已解决
问题解决了,因为我必须在客户端模式下编写public $timestamps = false;
。之后,我不需要手动插入user
值。因为laravel正在执行该任务,因为我在User和Client Models关系中编写了外键。即手动return $this->hasMany('App\Client', 'user')
和return $this->belongsTo('App\User', 'user')
。
我无法理解我应该为这个laravel功能做些什么。我应该哭还是笑?