喜欢与Phalcon合作,但担心模型关系的最佳实践。例如,如果我有以下数据库关系:
http://i.imgur.com/8kZYomW.png
在Thing模型中创建一个关系,如:
public function initialize()
{
$this->hasOne('categoryId', 'Categories', 'id', array('alias' => 'cat'));
}
以下内容很容易打印出来:
{{ thing.cat.name }}
鉴于pre-phalcon我会加入2进行1次往返,优雅的价值是2 DB的点击...
...直到你抓住一个说1000件事的清单并循环通过:
{{ for thing in things }}
<li>{{ thing.cat.name }}</li>
{{ endfor }}
然后我得到1,001个DB呼叫(假设我猜有1000个不同的类别)。
处理此方案的最佳做法是什么?而不只是像这样的简单关系,其中查找可能是相当静态的并且易于缓存。那么您可能会在历史日期,客户和客户类别之间列出发票,从而建立更具活力的关系呢?
答案 0 :(得分:1)
要构建更复杂的查询,您可能需要检查query builder examples。
基本(未经测试)是:
$things = $this->modelsManager->createBuilder()
->from('Things', 'thing')
->leftJoin('Categories', 'category.id = thing.categoryId', 'category')
->getQuery()
->execute();
var_dump($things->toArray());
答案 1 :(得分:1)
添加'reusable' => true
可能有所帮助。
public function initialize()
{
$this->hasOne('categoryId', 'Categories', 'id', array(
'alias' => 'cat', 'reusable' => true));
}
http://docs.phalconphp.com/en/latest/reference/models-cache.html#reusable-related-records
答案 2 :(得分:0)
我不是百分百肯定你在问什么。虽然如果我理解正确你在寻找类似的东西:
// Thing model
public function initialize()
{
$this->belongsTo('categoryId', 'Categories', 'id');
}
// Category model
public function initialize()
{
$this->hasMany('id', 'Things', 'categoryId', array('alias' => 'things'));
}
// Output things in certain category
foreach($category->things as $thing)
{
echo $thing->name;
}
如果我完全误解了你的问题,我道歉。
希望它有所帮助!