laravel数据库查询如何优雅简洁的设置表别名

在使用laravel的数据库操作时 表的别名主要通过user as u1或者$tablename = (new model())->getTable()的方式设置,感觉不够优雅(每次都需要额外定义变量),现在的用法:

$userTable = $this->getTable();
$bookTable = (new BookModel())->getTable();
$this->getDB()
->select('查询字段')
->leftjoin($bookTable, $thisTable . ' . book_id',  $bookTable . '.id')

因此想问下在laravel原有机制里面有优雅简洁的实现方式吗 之前用过Yii2的查询:

UserModel::find()
->select('这里是查询的字段')
->alias('usermodel表的别名')
->lefjoin(['bookmodel别名'=>BookModel::tableName()])

Laravel中有类似的alias方法和通过数组取别名的方法吗,或者如果要自定义实现,需要怎么去设计

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7

既然用model了,为何不直接用model的关联?我看很多人用model还写这种关联,有点不明白。复杂的语句不是可以用DB么?

2个月前 评论
pawn (楼主) 2个月前
pawn (楼主) 2个月前
Rache1 2个月前
User::query()->from('users','u')
    ->leftJoin('books as b','u.id','=','b.user_id')
    ->get();
2个月前 评论

如果想只使用一个sql语句查出所有数据,就使用左联或右联。 但我从来都不这样做,我都是先查出模型,再查其他需要输出的字段。

2个月前 评论

推荐使用子连接查询来设置别名,参考官方例子:

$latestPosts = DB::table('posts')
                   ->select('user_id', DB::raw('MAX(created_at) as last_post_created_at'))
                   ->where('is_published', true)
                   ->groupBy('user_id');

$users = DB::table('users')
        ->joinSub($latestPosts, 'latest_posts', function ($join) {
            $join->on('users.id', '=', 'latest_posts.user_id');
        })->get();
2个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!