[英]Get hasMany relationship with Eloquent Laravel
我有兩個帶有這種模式的表:
mysql> show columns from table_1;
+-------------+------------------+------+-----+---------------------+-----------
| Field | Type | Null | Key | Default | Extra
+-------------+------------------+------+-----+---------------------+-----------
| id | int(10) unsigned | NO | PRI | NULL | auto_incre
| id_world | int(11) | NO | | NULL |
| key | varchar(255) | NO | | NULL |
| name | varchar(255) | NO | | NULL |
| description | varchar(255) | NO | | NULL |
| level | int(11) | NO | | 0 |
| created_at | timestamp | NO | | 0000-00-00 00:00:00 |
| updated_at | timestamp | NO | | 0000-00-00 00:00:00 |
+-------------+------------------+------+-----+---------------------+-----------
8 rows in set (0.00 sec)
和
mysql> show columns from table_2;
+--------------+------------------+------+-----+---------------------+----------
------+
| Field | Type | Null | Key | Default | Extra
|
+--------------+------------------+------+-----+---------------------+----------
| id | int(10) unsigned | NO | PRI | NULL | auto_incr
| key | varchar(255) | NO | | NULL |
| level | int(11) | NO | | NULL |
| name | varchar(255) | NO | | NULL |
| description | varchar(255) | NO | | NULL |
| price | int(11) | NO | | NULL |
| amount | int(11) | NO | | NULL |
| created_at | timestamp | NO | | 0000-00-00 00:00:00 |
| updated_at | timestamp | NO | | 0000-00-00 00:00:00 |
+--------------+------------------+------+-----+---------------------+----------
30 rows in set (0.00 sec)
我想獲取所有字段“來自table_2,其中table_2.key = table_1.key AND table_2.level = 10”,這是在我的模型中使用hasMany選項的正確方法嗎?
我的普通查詢如下所示:
SELECT A.key AS p_key,
A.name AS p_key,
A.description AS p_desc,
A.level AS p_level,
B.key AS r_key,
B.level AS r_level,
B.name AS r_name,
B.description AS r_desc
FROM
table_1 AS A,
table_2 AS B
WHERE
B.key = A.key AND
B.level = '1'
要使用這些表建立hasMany
關系,您需要首先創建兩個模型,例如:
class TableOne extends Eloquent {
protected $table = 'table_1';
public function tableTwoItems()
{
return $this->hasMany('TableTwo', 'table_2.key', 'table_1.key')
->where('table_2.level', 1);
}
}
class TableTwo extends Eloquent {
protected $table = 'table_2';
}
一旦在app/models
目錄中創建了這些模型,就可以使用以下代碼:
$result = TableOne::with('tableTwoItems')->get();
要選擇項目/字段,您可以使用如下所示的內容:
$result = TableOne::with(array('tableTwoItems' => function($query){
$query->select('table_2.key as k2', 'table_2.name as name2', 'more...');
}))->select('table_1.key as k1', 'table_1.name as name1', 'more...')->get();
您可以像這樣訪問它們:
$result->first()->tableTwoItems->first();
或者您可以循環$result
,也可以使用嵌套循環循環相關項目。 例如:
foreach($result as $tableOneItem)
echo $tableOneItem->name;
foreach($tableOneItem->tableTwoItems as $tabletwoItem)
echo $tabletwoItem->name;
endforeach;
endforeach;
嘗試在兩個表的key
使用不同的字段名稱,並使它們也唯一。 有關更多信息,請閱讀雄辯的關系文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.