Laravel Eloquent Complex Join声明 - 提供了具体示例

时间:2017-05-04 04:14:27

标签: php mysql sql laravel

我有以下原始SQL,我正在尝试将其转换为Eloquent形式:

<meta charset="UTF-8">
 <meta name=viewport content="width=device-width, initial-scale=1">

我制作了以下内容并且我遇到了一个错误,说'10'不是一个列。 10是$ this-&gt; currentPerson-&gt; defaultOrgID

的值
    SELECT oe.eventID, oe.eventName, oet.etName, date_format(oe.eventStartDate, '%c/%d/%Y') as eventStartDate, 
           date_format(oe.eventEndDate, '%c/%d/%Y') AS eventEndDate
    FROM `org-event` oe
    JOIN `org-event_types` oet on oe.eventTypeID=oet.etID and oet.orgID=?
    JOIN `event-registration` er on er.eventID = oe.eventID 
    WHERE (er.regStatus='Active' or er.regStatus='In Progress') AND personID=? AND oe.deleted_at is NULL
    ORDER BY oe.eventStartDate DESC

我删除了deleted_at where子句,因为这是自动使用eloquent。

1 个答案:

答案 0 :(得分:0)

您必须加入相应的外键:oe.eventTypeID=oet.etID,然后提供一个where,说明您希望过滤结果的内容,即->where('orgID','=',$this->currentPerson->defaultOrgID)

DB::table('org-event')
            ->join('org-event_types', function($join) {
                $join->on('org-event_types.etID', '=', 'org-event.eventTypeID');
                $join->on('org-event_types.orgID', '=', 'org-event.eventTypeID')->where('orgID','=',$this->currentPerson->defaultOrgID);
            })->join('event-registration', 'event-registration.eventID', '=', 'org-event.eventID')
            ->where('event-registration.personID', '=', auth()->user()->id)
            ->where(function($w) {
                $w->where('event-registration.regStatus', '=', 'Active')
                  ->orWhere('event-registration.regStatus', '=', 'In Progress');
            })
            ->select('org-event.eventID', 'eventName', 'etName', 'eventStartDate', 'eventEndDate')
            ->orderBy('org-event.eventStartDate')->get();