Kohana 添加函数返回省份名称
Posted
技术标签:
【中文标题】Kohana 添加函数返回省份名称【英文标题】:Kohana add function return province name 【发布时间】:2013-11-04 00:03:50 【问题描述】:我又回来回答另一个问题了,我正在努力尝试。但我无法修复它。 这是我的问题;
我有一个数据库表,它的 ProvinceID 可以从 1 更改为 12。但它是省的 ID。省份以值 pName 存储在表 Provinces 中
我有以下代码来更改表格,并将其与首选项表格连接
$veiling = ORM::factory('veilingen')
->select('veilingvoorkeur.*')
->join('veilingvoorkeur', 'LEFT')
->on('veilingen.id', '=', 'veilingvoorkeur.vId')
->find_all();
$this->template->content = View::factory('veiling/veilingen')
->bind('veiling', $veiling);
在我的视图中正确显示;
echo '<div class="row">';
foreach($veiling as $ve)
echo $ve->provincie;
?>
</div>
它显示省 id;但我想为其添加一个功能;所以它将被转换为一个省名。通常我会创建一个带有函数 getProvince($provinceId)
的functions.php文件执行 mysql 查询以从 Provinces 中获取 pName 值,这就是工作。但我是新来的kohana。在 ORM 选择部分是否可以选择将省 ID 转换为省 ['pName'],还是我必须搜索另一个解决方案。我找不到:(
所以。请再帮我上路。
提前感谢。
亲切的问候, 凯文
编辑:1:08 我已经尝试了一些东西,它奏效了。我在视图文件中使用了 ORM,用于添加功能;
function provincie($id)
$provincie = ORM::factory('provincies', $id);
return $provincie->pName;
但是我对这种解决方法不满意,还有其他方法吗?还是我必须这样使用?
【问题讨论】:
【参考方案1】:查看 Kohana 的 ORM relationships。如果你使用这个,你可以通过简单地调用来访问省份名称:
$ve->provincie->name;
关系定义可能类似于:
protected $_belongs_to = array(
'provincie' => array(
'model' => 'Provincie',
'foreign_key' => 'provincie_id'
),
);
请注意,如果您有一个名为provincie
的表列,我在上面给出的关系定义将不起作用。您要么必须将表列更改为provincie_id
,要么将关系重命名为例如provincie_model
.
您在执行echo $ve->provincie;
时描述的输出建议您将ID 存储在名为provincie
的列中,因此上述内容适用于您。
我个人会选择第一个选项,因为我更喜欢直接访问带有 _id
后缀的 ID 和不带任何后缀的模型。但这取决于你。
编辑:如果您使用 Kohanas ORM 关系,您甚至可以使用 with()
使用初始查询加载省份,例如:
ORM::factory('veiling')->with('provincie')->find_all();
这可以为您节省数百个额外的查询。
【讨论】:
假设外键的列叫做provincie
,你能不能不直接说'foreign_key'=>'provincie'
就行了?
不,因为这种关系也称为provincie
,这将是模棱两可的。 Kohana 不知道是获取模型还是获取表列,并选择其中一个(如果我记得正确,列值)。仅供参考:关系定义中的foreign_key
属性指的是对象本身的列。相信my answer here有更深入的解释。
不错,我要试试这个! =)以上是关于Kohana 添加函数返回省份名称的主要内容,如果未能解决你的问题,请参考以下文章