我正在尝试存储一个模型,这是一个链接表。 表:
Schema::create('game_has_users', function (Blueprint $table) {
$table->integer('game_id')->unsigned();
$table->integer('user_id')->unsigned();
$table->foreign('game_id')->references('id')->on('games')->onUpdate('cascade')->onDelete('cascade');
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
$table->timestamps();
});
Game_Has_Users模型:
class Game_Has_Users extends Model
{
protected $table = 'game_has_users';
public function user()
{
return $this->hasOne('App\User', 'user_id');
}
public function game()
{
return $this->hasOne('App\Game', 'game_id');
}
}
我想存储游戏,之后,应使用用户ID和游戏ID创建Game_Has_Users模型。
try {
$game = Game::create([]);
$user = User::where('name', $request->input('name'))->first();
// $game_users = Game_Has_Users::create([]);
// $game_users->user = $user->id;
// $game_users->game = $game->id;
// $game_users->save();
$test = Game_Has_Users::create([
'user_id' => $user->id,
'game_id' => $game->id
]);
return response()->json(['t' => $test, 'status' => 'ok']);
}
catch(\Exception $e) {
return response()->json(['status' => 'failed', 'message' => $e]);
}
但是,我总是收到以下回复:状态:失败,消息:[]。 它没有例外,所以我不知道我做错了什么。 我尝试了不同的方法,例如:拥有游戏ID和用户ID的默认值,保存链接模型的不同方法。 $ game-> id和$ user-> id在我通过回复发送时会有值。
答案 0 :(得分:2)
您应该设置$fillable
属性;
protected $fillable = ['user_id', 'game_id'];
在Game_Has_Users
模型中
答案 1 :(得分:2)
符合Eloquent
Eloquent希望每个表都有一个主键,因此请确保在此表中添加一个id列。如果没有这个专栏,在利用各种雄辩的方法时,你会遇到问题。
在迁移过程中,这将添加一个自动增量主键:
$table->increments('id');
利用关系
接下来,如果我更正,Games_Has_Users看起来像是一对多关系。
因此,您不需要拥有此表的模型。使用适当的belongsToMany关系,您可以将模型相互附加:
$game = Game::find(1);
$user = User::find(1);
// Assuming the User model has a games() belongsToMany relationship;
$user->games()->attach($game);
// or the inverse
$games->users()->attach($user);
然后,您可以使用$user->games
访问附加到用户的游戏集合。
通读https://laravel.com/docs/5.5/eloquent-relationships#many-to-many