我有两个表,page
和edit
。
page
+----+-----------+
| id | page_name |
+----+-----------+
| 1 | page |
+----+-----------+
edit
+----+---------+------+
| id | page_id | name |
+----+---------+------+
| 1 | 1 | home |
| 1 | 1 | side |
+----+---------+------+
现在我定义了一种将两者联系在一起的关系。它返回如下内容:
array(
'id' => 1,
'page_name' => 'page',
'edit' => array(
0 => array(
'id' => 1,
'page_id' => 1,
'name' => 'home'
),
1 => array(
'id' => 2,
'page_id' => 1,
'name' => 'side'
)
)
)
我希望能够将edit
数组的键设置为某一列的值。像这样:
array(
'id' => 1,
'page_name' => 'page',
'edit' => array(
'home' => array( // the key is the name column
'id' => 1,
'page_id' => 1,
'name' => 'home'
),
'side' => array( // the key is the name column
'id' => 2,
'page_id' => 1,
'name' => 'side'
)
)
)
如何使用Laravel的查询生成器来实现这一点?或者这是我必须格式化的东西&使用循环手动构建?
一个解决方案
//the page you will work with
$page = Page::find(1);
//his edits, by pairs array('name' => 'id', ..)
$page_edit_lists = $page->edit()->list('id', 'name');
//now, look for a name
$edit_name = 'grammar fix';
$edit_id = array_get($page_edit_lists , $edit_name); //if exist or null
//now get the row by is ID
$page_edits = $page->edit()->get();
//when edits data is already loaded, so it will loop for you..
$edit = $page_edits->find($edit_id);
//or by dynamic querying, SELECT .. WHERE id = ? ..
$edit = $page->edit()->find($edit_id);
没有测试,但我想你已经明白了。很抱歉我英语不好。。
http://laravel.com/docs/5.1/collectionskeyBy()。
$collection=收集([['product_id'=>'prod-100','name]=>'desk'],['product_id'=>'prod-200','name'=>'chair'],]);
$keyed=$collection->keyBy('product_id');
$keyed->all();
/*['prod-100'=>['product_id'=>'prod-1','name'=>'Desk'],'prod-200'=>['product_id'=>'prod-2','name'=>'Chair'],]*/