gpt4 book ai didi

php - FuelPHP ORM 可以处理这种数据库设计吗?

转载 作者:可可西里 更新时间:2023-11-01 00:35:37 26 4
gpt4 key购买 nike

我想知道 Fuel ORM 是否可以处理这里描述的设计:

http://www.codeproject.com/KB/aspnet/LocalizedSamplePart2/normalizedSchema.gif

必须生成并执行以下 SQL 或类似的 SQL:

SELECT CultureId
FROM Culture WHERE CultureName = @CultureName

SELECT I.ItemId, IL.[Name], IL.[Description],
I.Price, CL.[Name], CL.[Description]
FROM Item I
INNER JOIN Item_Locale IL ON I.ItemId = IL.ItemID AND IL.CultureId = @CultureIdD
INNER JOIN Category C ON I.CategoryId = C.CategoryId
INNER JOIN Category_Locale CL ON C.CategoryID = CL.CategoryId AND CL.CultureId = @cultureId
WHERE I.SellerId = @SellerID

或者我必须使用普通查询?

请指教。

最佳答案

您需要按照描述配置主键和外键 in the link already given .

从给出的例子来看,关系是:

  • Item 有一个 Item_Locale
  • Item_Locale 属于项目
  • 项目有许多类别
  • 类别属于项目
  • 类别有一个 Category_Locale
  • Category_Locale 属于类别

查询看起来像这样:

$items = Model_Item::query()
->related('locale')
->related('categories')
->related('categories.locale')
->where('SellerID', $sellerID)
->get();

我假设语言环境在运行时不会改变,但不能硬编码。在这种情况下,您需要类似以下内容。从设置始终是关系一部分的默认条件开始。这些需要添加到模型中关系的定义中,例如 Model_Item 中的以下示例。

protected static $_has_one = array(
'locale' => array(
'model_to' => 'Model_Item_Locale',
'key_from' => 'ItemId',
'key_to' => 'ItemId',
'conditions' => array(
'join_type' => 'inner',
'where' => array(),
),
),
);

我还不能添加实际的 where 条件,因为它必须是动态的,而且你不能在类属性定义中有它。因此我们将在加载类的毫秒级添加它:

public static function _init()
{
$culture_id = ; // get that from somewhere
static::$_has_one['locale']['where'][] = array('CultureId', '=', $culture_id);
}

每次都会将其添加到连接部分,在主键-外键匹配旁边。

查询将返回一组项目,这些项目将在属性中包含语言环境信息,并具有一组类别,这些类别都有自己的语言环境属性来描述它们。

foreach ($items as $i)
{
echo $i->locale->Name;
foreach ($i->categories as $c)
{
echo $c->locale->Name;
}
}

关于php - FuelPHP ORM 可以处理这种数据库设计吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8664089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com