Laravel Raw 语句我可以根据列数据是不是等于另一个表从不同的表中进行选择
Posted
技术标签:
【中文标题】Laravel Raw 语句我可以根据列数据是不是等于另一个表从不同的表中进行选择【英文标题】:Laravel Raw Statement Where I can select from different table based on if a column data is equal to anotherLaravel Raw 语句我可以根据列数据是否等于另一个表从不同的表中进行选择 【发布时间】:2021-09-02 23:40:42 【问题描述】:我正在使用下面的代码从 Bookings 表中选择和收集数据。
public function collection()
return Booking::select(
'id',
'place_id',
'payer_name',
'user_fullname',
'user_email',
'user_phone',
'user_no_of_guest',
'user_no_of_babies',
'user_checkin',
'user_checkout',
'is_approved',
'user_promo',
'user_payment_type',
'user_booking_tracking_id',
Booking::raw('(created_at + INTERVAL 2 HOUR) AS created_at'),
'paid_ammount'
)->get();
我要从中收集的数据库是bookings Table,我要从中收集数据的表是promo_codes Table。
我想选择 promo_codes.promo_type,其中 booking.user_promo == promo_codes.promocode,如果有任何意义,如果问题有点令人困惑,抱歉,但这是我能解释的最好的。
【问题讨论】:
【参考方案1】:试试这个查询 -
public function collection()
return DB::table('bookings')->select(
'id',
'place_id',
'payer_name',
'user_fullname',
'user_email',
'user_phone',
'user_no_of_guest',
'user_no_of_babies',
'user_checkin',
'user_checkout',
'is_approved',
'user_promo',
'user_payment_type',
'user_booking_tracking_id',
Booking::raw('(created_at + INTERVAL 2 HOUR) AS created_at'),
'paid_ammount',
'promo_codes.promo_type'
)->join('promo_codes', 'booking.user_promo', '=', 'promo_codes.promocode')->get();
【讨论】:
我尝试了类似的方法,现在尝试了您的方法,但它返回的是空数据。 为了让它工作,我必须在每个列名之前添加“booking.”。 如果 promo_codes 表中没有任何促销代码,它应该返回空数据。考虑使用leftJoin
代替 join
。让我知道它是否对你有用。
唯一的问题是 Booking::raw 行不再工作,并且出现错误,知道为什么吗?
DB::raw('(bookings.created_at + INTERVAL 2 HOUR) AS bookings_created_at'),
- 改用这个以上是关于Laravel Raw 语句我可以根据列数据是不是等于另一个表从不同的表中进行选择的主要内容,如果未能解决你的问题,请参考以下文章
由于选择 DB:raw 和 GROUP BY 的非聚合列导致 Laravel 语法错误
我怎样才能“在哪里”原始列(DB::raw)。 [拉拉维尔]