fuelphpのas_arrayでのkey指定の制限
fuelphpのas_arrayでのkey指定の制限
as_arrayで配列のキーを指定する場合、
キーのカラムがユニークである必要がある
プライマリーキーが複数カラムの場合も対応してない。
またまたハマったのでメモ
http://fuelphp.jp/docs/1.7/classes/database/usage.html#results
オプションとして、as_arrayから返る配列のキーと値を指定することもできます。
$result = DB::select()->from('users')->execute(); $on_key = $result->as_array('id'); foreach($on_key as $id => $item) { // $id にはレコード ID が入る // $item またはその $id に関する処理 } $key_value = $result->as_array('id', 'email'); foreach($key_value as $id => $email) { // ここで $email には電子メールのフィールドが入るので // $id や $email に関する処理ができる }
as_arrayのソースを見てみる。
/fuel/core/classes/database/result.php
elseif ($value === null)
{
// Associative rows
if ($this->_as_object)
{
foreach ($this as $row)
{
$results[$row->$key] = $row;
}
}
else
{
foreach ($this as $row)
{
$results[$row[$key]] = $row;
}
}
}
上下は省略してます。
$resultsが結果なんですが
$results[$row[$key]] = $row;
とキー指定されたレコードの値で変数にいれてます。
つまりキー指定されたレコードの内容が同じになる場合は上書きされます。
プライマリーキーor ユニークなカラムで使いましょう。ということなんでしょうね。
ドキュメントに書いといてよ・・・
プライマリーキーが複数カラムの場合もこれだと上書きされるので使えません。
制限に引っかかる場合はキーの指定をせず
自分で配列に詰めなおしましょう!