FuelPHP-如何使用ORM访问自定义sql语句? 问题:
是否可以创建自定义SQL查询,并像对待FuelPHPs ORM表一样对待其结果FuelPHP-如何使用ORM访问自定义sql语句? 问题:,orm,fuelphp,fuelphp-orm,Orm,Fuelphp,Fuelphp Orm,是否可以创建自定义SQL查询,并像对待FuelPHPs ORM表一样对待其结果 例子 我有一个SQL语句,可以为我透视表。下图显示了pivot SQL语句的功能。左边是“properties”表,右边是下面SQL pivot语句的结果 SQL Pivot语句结果: SQL透视语句: SELECT item_id, MAX(IF(property_name = 'color', value, NULL)) AS color, MAX(IF(property_name = 'size
例子 我有一个SQL语句,可以为我透视表。下图显示了pivot SQL语句的功能。左边是“properties”表,右边是下面SQL pivot语句的结果 SQL Pivot语句结果: SQL透视语句:
SELECT
item_id,
MAX(IF(property_name = 'color', value, NULL)) AS color,
MAX(IF(property_name = 'size', value, NULL)) AS size,
...
...
...
FROM
properties
GROUP BY
item_id;
问题:
SELECT
item_id,
MAX(IF(property_name = 'color', value, NULL)) AS color,
MAX(IF(property_name = 'size', value, NULL)) AS size,
...
...
...
FROM
properties
GROUP BY
item_id;
我是否可以执行上面的语句,然后通过正常的ORM方法访问这些列,例如
echo $table->color;
$table->color = 'blue';
$table->save();
另外,我看了看,它看起来可能是我需要的。。。但我无法让它工作。这是我需要的吗 上面的代码是我从你那里得到的。它正是我所需要的,但不确定如何与ORM集成 我得到了一些有用的东西,如果有更好的方法,请告诉我 1)使sql语句创建一个临时表。
CREATE TEMPORARY TABLE IF NOT EXISTS temp_compiled_properties AS
(SELECT
item_id,
MAX(IF(property_name = 'color', value, NULL)) AS color,
MAX(IF(property_name = 'size', value, NULL)) AS size,
...
...
...
FROM
properties
GROUP BY
item_id);
2)创建一个模型
//this is not a typical ORM model and cannot be accessed as such
//You must first run the init function before data can be accesses
//You can read data from the model, other methods may work, but not all ORM functions have been tested with this model.
class Model_Properties_Pivot extends \Orm\Model
{
//--------------------------------------
//Table Details
//--------------------------------------
protected static $_table_name = 'temp_compiled_properties';
protected static $_primary_key = array('item_id');
//dont define properties, ORM will automatically query the temp table to get these
//protected static $_properties = array();
public static function init($game_id)
{
$sql = "CREATE TEMPORARY TABLE IF NOT EXISTS temp_compiled_properties AS
(SELECT
item_id,
MAX(IF(property_name = 'color', value, NULL)) AS color,
MAX(IF(property_name = 'size', value, NULL)) AS size,
...
...
...
FROM
properties
GROUP BY
item_id)";
DB::query($sql)->execute();
}
3)读取模型中的数据
Model_Properties_Pivot::init(14);
$all_data = Model_Properties_Pivot::query()->get();
此外,我调查了EAV并使其工作。问题是我的“属性”字段实际上是另一个外键(自动递增编号)。这意味着我无法使用它,因为它是一个自动递增的数字。基本上,我不能像这样访问它
$properties->10