john.brown
просто кулибин
LightOrm и relation один к одному
Есть таблички:
items
----------
item_id | cat_id
item_translate
-------------------
tr_id | item_id | lng | iname
В первой хранятся разные единицы, во второй их названия на разных языках.
Ну и классы, соответственно:
Item.php
ItemTranslate.php
Ну вот, из всего этого хотелось бы получить итем и его название на требуемом языке. На подобие этого:
[SQL]
SELECT t1.*, t2.iname FROM items t1, item_translate t2 WHERE t1.cat_id=$catId AND t2.item_id=t1.item_id AND t2.lng=$lng
[/SQL]
Пытаюсь это сделать следующим образом:
Увы, результат совсем не тот - он выбирает все итемы у которых есть название на нужном языке, но загружает перевод с младшим tr_id... А хотелось бы на нужном языке....
Что я не так делаю?
Есть таблички:
items
----------
item_id | cat_id
item_translate
-------------------
tr_id | item_id | lng | iname
В первой хранятся разные единицы, во второй их названия на разных языках.
Ну и классы, соответственно:
Item.php
PHP:
class model_Item {
protected $map = array(
'item_id' => 'id',
'cat_id' => 'catId'
);
protected $relations = array(
'item_translate' => 'translate'
);
protected $lazyProperties = array();
protected $handlers = array();
}
PHP:
class model_ItemTranslate {
protected $map = array(
'tr_id' => 'id',
'item_id' => 'itemId',
'lng' => 'lng',
'iname' => 'iname'
);
protected $relations = array();
protected $lazyProperties = array();
protected $handlers = array();
}
[SQL]
SELECT t1.*, t2.iname FROM items t1, item_translate t2 WHERE t1.cat_id=$catId AND t2.item_id=t1.item_id AND t2.lng=$lng
[/SQL]
Пытаюсь это сделать следующим образом:
PHP:
$items = new Collection($db, 'items', 'model_Item');
$translates = new Collection($db, 'item_translate', 'model_ItemTranslate');
$items->setOne2OneRelation($translates, 'id','itemId');
foreach($items->filter('catId = ?', $catId)->using($translates, 'lng = ?', $lng) as $item) {
echo $item->translate->iname;
}
Что я не так делаю?