Phalcon 模型关系的最佳实践
Best practice for Phalcon model relationship
喜欢使用 Phalcon,但对模型关系的最佳实践有顾虑。例如,如果我有以下数据库关系:
http://i.imgur.com/8kZYomW.png
并在事物模型中创建如下关系:
public function initialize()
{
$this->hasOne('categoryId', 'Categories', 'id', array('alias' => 'cat'));
}
以下内容很容易打印出来:
{{ thing.cat.name }}
虽然在 phalcon 之前我会加入 2 进行 1 次往返,但优雅值得 2 次 DB 命中...
... 直到您抓取了一个包含 1,000 件事物的列表并像这样循环:
{{ for thing in things }}
<li>{{ thing.cat.name }}</li>
{{ endfor }}
然后我收到 1,001 个数据库调用(假设我猜有 1,000 个不同的类别)。
处理这种情况的最佳做法是什么?而不仅仅是像这样的简单关系,在这种关系中,查找可能是相当静态的并且易于缓存。如果您可以列出历史日期、他们的客户和客户类别之间的发票,那么更动态的关系怎么样?
我不是 100% 确定你在问什么。虽然如果我理解正确的话你是在寻找类似的东西:
// 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;
}
如果我完全误解了你的问题,我深表歉意。
希望对您有所帮助!
要构建更复杂的查询,您可能需要检查那些 query builder examples。
基本(未测试)是:
$things = $this->modelsManager->createBuilder()
->from('Things', 'thing')
->leftJoin('Categories', 'category.id = thing.categoryId', 'category')
->getQuery()
->execute();
var_dump($things->toArray());
添加 '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
喜欢使用 Phalcon,但对模型关系的最佳实践有顾虑。例如,如果我有以下数据库关系:
http://i.imgur.com/8kZYomW.png
并在事物模型中创建如下关系:
public function initialize()
{
$this->hasOne('categoryId', 'Categories', 'id', array('alias' => 'cat'));
}
以下内容很容易打印出来:
{{ thing.cat.name }}
虽然在 phalcon 之前我会加入 2 进行 1 次往返,但优雅值得 2 次 DB 命中...
... 直到您抓取了一个包含 1,000 件事物的列表并像这样循环:
{{ for thing in things }}
<li>{{ thing.cat.name }}</li>
{{ endfor }}
然后我收到 1,001 个数据库调用(假设我猜有 1,000 个不同的类别)。
处理这种情况的最佳做法是什么?而不仅仅是像这样的简单关系,在这种关系中,查找可能是相当静态的并且易于缓存。如果您可以列出历史日期、他们的客户和客户类别之间的发票,那么更动态的关系怎么样?
我不是 100% 确定你在问什么。虽然如果我理解正确的话你是在寻找类似的东西:
// 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;
}
如果我完全误解了你的问题,我深表歉意。
希望对您有所帮助!
要构建更复杂的查询,您可能需要检查那些 query builder examples。
基本(未测试)是:
$things = $this->modelsManager->createBuilder()
->from('Things', 'thing')
->leftJoin('Categories', 'category.id = thing.categoryId', 'category')
->getQuery()
->execute();
var_dump($things->toArray());
添加 '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