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