如何在 codeigniter 4 中使用 table 别名?
How to use table alias in codeigniter 4?
我正在尝试在 CitizenModel 中加入宗教和公民 table。问题是 from 语句总是包含 table 公民。
这是模型脚本示例:
<?php
namespace App\Models;
use CodeIgniter\Model;
class CitizenModel extends Model
{
protected $table = 'citizen';
protected $primaryKey = 'CitizenID';
protected $allowedFields = [
'CitizenID',
'ReligionId',
];
public function getCitizen()
{
//$this->distinct();
$this->select('a.*, b.Name as Religion');
$this->from("citizen a");
$this->join('religions b', 'b.ReligionId = a.ReligionId', 'LEFT');
$result = $this->findAll();
echo $this->db->getLastQuery();
return $result;
}
}
这是最后的查询结果:
SELECT `a`.*, `b`.`Name` as `Religion`
FROM (`citizen`, `citizen` `a`)
LEFT JOIN `religions` `b` ON `b`.`ReligionId` = `a`.`ReligionId`
我在 sqlyog 中测试了查询,但查询结果为
FROM (`citizen`, `citizen` `a`)
不同于
FROM (`citizen` `a`)
除非我在 select 中添加了 DISTINCT。
我认为发生这种情况是因为您实际上设置了两个选择。一个在 $table 属性 中,一个在你的 $this->from 方法中。
在这种情况下我会尝试做的是从中删除 $this-> 并重新编写 $table 属性。像这样:
public function getCitizen()
{
//$this->distinct();
$this->select('a.*, b.Name as Religion');
$this->table("citizen a");
$this->join('religions b', 'b.ReligionId = a.ReligionId', 'LEFT');
$result = $this->findAll();
echo $this->db->getLastQuery();
return $result;
}
如果这不起作用,您可能希望为该查询使用不同的数据库实例,而不是模型正在使用的数据库实例。使用查询生成器。
public function getCitizen() {
$db = \Config\Database::connect();
$builder = $db->table('citizen a');
$builder->select('a.*, b.Name as Religion');
$builder->join('religions b', 'b.ReligionId = a.ReligionId', 'LEFT');
$result = $builder->get()->getResult();
}
我正在尝试在 CitizenModel 中加入宗教和公民 table。问题是 from 语句总是包含 table 公民。
这是模型脚本示例:
<?php
namespace App\Models;
use CodeIgniter\Model;
class CitizenModel extends Model
{
protected $table = 'citizen';
protected $primaryKey = 'CitizenID';
protected $allowedFields = [
'CitizenID',
'ReligionId',
];
public function getCitizen()
{
//$this->distinct();
$this->select('a.*, b.Name as Religion');
$this->from("citizen a");
$this->join('religions b', 'b.ReligionId = a.ReligionId', 'LEFT');
$result = $this->findAll();
echo $this->db->getLastQuery();
return $result;
}
}
这是最后的查询结果:
SELECT `a`.*, `b`.`Name` as `Religion`
FROM (`citizen`, `citizen` `a`)
LEFT JOIN `religions` `b` ON `b`.`ReligionId` = `a`.`ReligionId`
我在 sqlyog 中测试了查询,但查询结果为
FROM (`citizen`, `citizen` `a`)
不同于
FROM (`citizen` `a`)
除非我在 select 中添加了 DISTINCT。
我认为发生这种情况是因为您实际上设置了两个选择。一个在 $table 属性 中,一个在你的 $this->from 方法中。
在这种情况下我会尝试做的是从中删除 $this-> 并重新编写 $table 属性。像这样:
public function getCitizen()
{
//$this->distinct();
$this->select('a.*, b.Name as Religion');
$this->table("citizen a");
$this->join('religions b', 'b.ReligionId = a.ReligionId', 'LEFT');
$result = $this->findAll();
echo $this->db->getLastQuery();
return $result;
}
如果这不起作用,您可能希望为该查询使用不同的数据库实例,而不是模型正在使用的数据库实例。使用查询生成器。
public function getCitizen() {
$db = \Config\Database::connect();
$builder = $db->table('citizen a');
$builder->select('a.*, b.Name as Religion');
$builder->join('religions b', 'b.ReligionId = a.ReligionId', 'LEFT');
$result = $builder->get()->getResult();
}