phalconphp hasMany()和belongsTo()没有加入

时间:2017-12-05 10:12:45

标签: php phalcon

我一直试图通过执行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(*)。

你有任何线索吗?

1 个答案:

答案 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