我有一个这样的mysql查询:
select result.*, rank_text.text
from cache_user_challenge_result result
left join rank_text on result.rank
between rank_text.rank_from and rank_text.rank_to
现在,对于我的laravel项目,我想将其更改为雄辩的,我尝试了一下,但它不起作用:
$this->select(
"{$this->table}.user_id",
'rank_text.text'
)
->leftJoin('rank_text', "{$this->table}.rank")
->whereBetween("{$this->table}.rank", ['rank_text.rankFrom', 'rank_text.rankTo'])
->first();
你能告诉我这是怎么回事吗?
非常感谢您!
更新:
很多小时后,我将查询更改为此:
$this->select(
"{$this->table}.user_id",
'rank_text.text'
)
->leftJoin('rank_text', function($query) {
$query->whereBetween("{$this->table}.rank", ['rank_text.rank_from', 'rank_text.rank_to']);
})
->get();
但是只能获取user_id,而不能获取文本。
答案 0 :(得分:0)
尝试创建像
这样的cache_user_challenge_result模型class CacheUserChallengeResult extends Model {
protected $table = 'cache_user_challenge_result';
public function scopeGetCacheUserRank()
{
return static::select(DB::raw('cache_user_challenge_result.*,rank_text.text'))->leftJoin('rank_text', function($join) {
$join->on('cache_user_challenge_result..rank', '=', 'rank_text.rank')->whereBetween('cache_user_challenge_result.rank',['rank_text.rankFrom', 'rank_text.rankTo']);
});
}
}
在Controller中,您可以这样调用
CacheUserChallengeResult::getCacheUserRank()->get();
它将为您提供所需排名的集合,您还可以传递范围内想要的排名的参数