phalconphp hasMany() 和 belongsTo() 没有加入
phalconphp hasMany() and belongsTo() not joining
我一直在尝试通过调用 findFirst() 来检索我的数据,但它不起作用。试了很多,到处找,都没有找到解决方法。
我有这些表:
- fruit
fruit_id
fruit_name
- fruit_color
fruit_id
fruit_color_name
在我的水果模型@Initialize()中,我声明:
$this->hasOne('fruit_id', 'fruitColor', 'fruit_id');
在我的 fruit_color 模型中,@initalize(),我有:
$this->belongsTo('fruit_id', 'fruit', 'fruit_id');
当我调用 find() 或 findFirst() 方法时,我无法检索任何内容。当我打印出来并进行调试时,我发现没有调用连接,我只得到一个简单的 SELECT (*).
你有什么线索吗?
我认为你没有理解模型关系的概念。我会试着用例子来解释。
模型关系根本不进行联接。当您要求相关型号时,他们会进行额外查询。
模型关系
public function initialize()
{
$this->hasMany('id', 'Models\ServicesVideos', 'service_id', [
'alias' => 'videos',
'params' => [
'order' => 'position ASC',
'conditions' => 'type = :type:',
'bind' => [
'type' => get_class($this)
]
]
]);
}
根据上面定义的关系,您可以像这样使用它:
$user = Users::findFirst(12);
$user->videos; // This will return all videos for this user
有关模型关系的更多信息:https://docs.phalconphp.com/en/3.2/db-models-relationships
但是,如果您需要连接两个或多个表,您需要使用 查询生成器。
$lang = $this->getDI()->getSession()->language;
$cacheFile = 'news-'. $lang;
$items = $this->modelsManager->createBuilder()
->columns([
'main.id',
'main.title',
'main.slug',
'main.summary',
'upload.id AS imageId',
'upload.filename AS imageFilename',
'upload.ver AS uploadVersion',
])
->from(['main' => 'Models\News'])
->leftJoin('Models\Uploads', 'upload.foreign_key = main.id AND upload.section = "newsImage" AND upload.is_active = "1" AND upload.is_default = "1"', 'upload')
->where('main.is_active = 1')
->andWhere('main.lang = :lang:', ['lang' => $lang])
->orderBy('main.ord ASC')
->getQuery()->cache(['key' => $cacheFile])->execute();
有关查询生成器的更多信息:https://docs.phalconphp.com/en/3.2/db-models
我一直在尝试通过调用 findFirst() 来检索我的数据,但它不起作用。试了很多,到处找,都没有找到解决方法。
我有这些表:
- fruit
fruit_id
fruit_name
- fruit_color
fruit_id
fruit_color_name
在我的水果模型@Initialize()中,我声明:
$this->hasOne('fruit_id', 'fruitColor', 'fruit_id');
在我的 fruit_color 模型中,@initalize(),我有:
$this->belongsTo('fruit_id', 'fruit', 'fruit_id');
当我调用 find() 或 findFirst() 方法时,我无法检索任何内容。当我打印出来并进行调试时,我发现没有调用连接,我只得到一个简单的 SELECT (*).
你有什么线索吗?
我认为你没有理解模型关系的概念。我会试着用例子来解释。
模型关系根本不进行联接。当您要求相关型号时,他们会进行额外查询。
模型关系
public function initialize()
{
$this->hasMany('id', 'Models\ServicesVideos', 'service_id', [
'alias' => 'videos',
'params' => [
'order' => 'position ASC',
'conditions' => 'type = :type:',
'bind' => [
'type' => get_class($this)
]
]
]);
}
根据上面定义的关系,您可以像这样使用它:
$user = Users::findFirst(12);
$user->videos; // This will return all videos for this user
有关模型关系的更多信息:https://docs.phalconphp.com/en/3.2/db-models-relationships
但是,如果您需要连接两个或多个表,您需要使用 查询生成器。
$lang = $this->getDI()->getSession()->language;
$cacheFile = 'news-'. $lang;
$items = $this->modelsManager->createBuilder()
->columns([
'main.id',
'main.title',
'main.slug',
'main.summary',
'upload.id AS imageId',
'upload.filename AS imageFilename',
'upload.ver AS uploadVersion',
])
->from(['main' => 'Models\News'])
->leftJoin('Models\Uploads', 'upload.foreign_key = main.id AND upload.section = "newsImage" AND upload.is_active = "1" AND upload.is_default = "1"', 'upload')
->where('main.is_active = 1')
->andWhere('main.lang = :lang:', ['lang' => $lang])
->orderBy('main.ord ASC')
->getQuery()->cache(['key' => $cacheFile])->execute();
有关查询生成器的更多信息:https://docs.phalconphp.com/en/3.2/db-models