我一直试图通过执行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(*)。
你有任何线索吗?
答案 0 :(得分:2)
我认为你不理解模型关系的概念。我将尝试用例子来解释。
模型关系根本不会创建联接。当您请求相关模型时,他们会进行额外的查询。
模型关系
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