0
當調用CollegeMajor::with('majors')->get()
時,我想要應用以下原始sql查詢: TRIM(TRAILING SUBSTRING_INDEX(parent_id, ':', -1) FROM parent_id)
到parent_id
列。 parent_id中的值存儲爲1:1234, 1:3121, 1:1332
等...因此,我想剝去冒號後面的所有內容。 CollegeMajor的主鍵是id,這些值是整數,如1
。我得到下面的錯誤,因爲Laravel認爲原始查詢是列的名稱。如何告訴Laravel在執行關係時將該SQL查詢應用於project_id
列?Laravel 5.2定義自引用模型關係時使用原始查詢?
CollegeMajor.php
class CollegeMajor extends Model {
public function majors() {
return $this->hasMany('App\Models\CollegeMajor', \DB::raw(TRIM(TRAILING SUBSTRING_INDEX(parent_id, ':', -1) FROM parent_id)))
->where('entity', 'major');
}
}
錯誤
Unknown column 'college_major.TRIM(TRAILING SUBSTRING_INDEX(parent_id, ':', -1) FROM parent_id)' in 'where clause' (SQL: select * from `college_major` where `entity` = major and `college_major`.`TRIM(TRAILING SUBSTRING_INDEX(parent_id, ':', -1) FROM parent_id)` in (1, 2, 3, 4, 5, 6, 7, 8))
college_majors表
id name entity parent_id
1 College of Art college 1234
2 College of Business college 4567
3 Art History major 1:1234
4 Asian Art major 1:1234
5 Accounting major 2:4567
6 Marketing major 2:4567
如何使它回來?
[
id: 1,
name: 'College of Art',
entity: 'college',
parent_id: 1234,
majors: [
{
id: 3,
name: 'Art History',
entity: 'major',
parent_id: '1:1234'
},
{
id: 4,
name: 'Asian Art',
entity: 'major',
parent_id: '1:1234'
}
]
....
]
非常接近我認爲。我編輯了我的問題。該集合是我想要實現的。有什麼建議麼? –
我更新了答案,因爲我忘記在查詢結尾處添加'get()'。然後它會返回一個集合。 – Gayan
我不得不做一些黑客解決方案,我從表格中獲得所有結果,只按大學過濾結果,爲每個大學對象添加「專業」鍵,然後遍歷每條記錄,如果它是主要的,則我遍歷每個大學的對象,並把這門專業推到它所屬的大學。迄今爲止,一個優雅的解決方案,但我認爲它現在會做。 –