一對多的關聯統計查詢時,指定的localkey問題

瀏覽:330 發布日期:2019/06/02 分類:ThinkPHP6專區
<?php

namespace app\common\model;

use think\Model;

class BookCategory extends Model
{

    protected $schema = [
        'category_name' => 'varchar',
        'description' => 'varchar',
        'object_id' => 'varchar',
        'create_time' => 'int',
        'delete_time' => 'int'
    ];

    /**
     * 關聯書本信息表模型
     *
     */
    public function books()
    {
        return $this->hasMany(BookInformation::class, 'category_id', 'object_id');
    }

}
關聯統計時$category = new BookCategory();
$classify = $category
            ->withCount('books')
            ->fetchSql()
            ->select();

        halt($classify);
生成的sql語句為
SELECT *,(SELECT COUNT(*) AS tp_count FROM `book_information` `count_table` WHERE ( `count_table`.`category_id` = book_category.id )) AS `books_count` FROM `book_category`

在關聯方法中,指定了localkey,但生成的sql中依舊是id

于是查看源碼,發現一對多中return $this->query->alias($aggregate . '_table')
            ->whereExp($aggregate . '_table.' . $this->foreignKey, '=' . $this->parent->getTable() . '.' . $this->parent->getPk())
            ->fetchSql()
            ->$aggregate($field);
將$this->parent->getPk()改為$this->localKey即解決問題
最佳答案
評論( 相關
后面還有條評論,點擊查看>>