我有一个 Posts
包含列的表 anonym
可以是1或0。我使用eloquent选择帖子,并像这样加入用户:
$posts = Post::with(
array('user'=>function($query){
$query->select('id','username');
}))
->with('category')
->withCount('likes')
->orderBy('id', 'DESC')
->paginate(25);
回报如下:
"data": [
{
"id": 116,
"user_id": 3,
...
"anonym": 1,
"likes_count": 0,
"user": {
"id": 3,
"username": "Max"
},
"category": null,
},
现在,当 anonym
在posts表中是 1
,我希望用户名不是例如“max”,而是“anonyman”。我尝试了一个原始的查询,但我无法让它工作。
用雄辩的语言能做到这一点吗?
编辑:
我尝试了以下建议:
array('user'=>function($query){
$query->select(DB::raw("IF(`posts`.`anonym` = 0, `users`.`username`, 'Anonym') as username"));
}))
但我得到一个错误,posts.anonym找不到:
找不到列:“字段列表”中的1054未知列“posts.anonym”(sql:选择if)( posts
. anonym
= 0, users
. username
,'anonyman')作为用户名 users
哪里 users
. id
在(1)中)
2条答案
按热度按时间a9wyjsp71#
你可以这样做:
zkure5ic2#
与其把查询弄得乱七八糟,不如更容易利用elokent的变种和属性转换
Post
型号:首先,它投射
anonym
所以你不必担心它到底是整数还是字符串。当你
echo $post->author
,雄辩的会默默呼唤getAuthorAttribute()
在后台。自author
不是作为属性存在的,你可以随便命名。