如何在 Laravel 中使用更改的列值建立关系

问题描述 投票:0回答:1

这是我在 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 方法的第三个参数中,当然这不起作用,因为它接受列名。我考虑过使用查询构建,但我有点迷失在这种情况下使用它的方式。

php laravel eloquent relationship eager-loading
1个回答
0
投票

在 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);
}


© www.soinside.com 2019 - 2024. All rights reserved.