这是我在 StackOverflow 上的第一个问题。我来这里是因为我试图在 Laravel 中建立一种特殊的关系。我希望能够做出这样的东西
public function game()
{
$original_game_name = preg_replace('/\s+BONUS.(\s+|\d+)+/', '', $this->game);
//I would like to use the current table game column modified to match the value at $original_game_name for the relationship. SOmething like:
//return $this->hasOne('VanguardLTE\Game', 'name', $orginal_game_name);
return $this->hasOne('VanguardLTE\Game', 'name', 'game');
}
我希望它是一种关系,这样我就可以在需要时轻松加载这种关系,轻松地使用“with”。
我尝试将 $orginal_game_name 直接放入 hasOne 方法的第三个参数中,当然这不起作用,因为它接受列名。我考虑过使用查询构建,但我有点迷失在这种情况下使用它的方式。
在 Laravel 中,hasOne、hasMany 等关系被设计为基于列映射,而不是动态生成的值。由于您尝试即时修改列的值,因此在这种情况下常规关系将无法直接起作用。
但是,您可以使用关系方法内的查询生成器定义自定义关系。这将允许您使用动态生成的值($original_game_name)来获取相关数据。
public function game()
{
$original_game_name = preg_replace('/\s+BONUS.(\s+|\d+)+/', '', $this->game);
return $this->hasOne('VanguardLTE\Game', 'name', 'name')
->where('name', $original_game_name);
}