Php DataMapperORM-如何获取所有模型和每个实例的相关数据
我不明白如何做到以下几点: 假设我有一张产品表和一张照片表。1产品有很多照片。因此,在产品模型中,我会:Php DataMapperORM-如何获取所有模型和每个实例的相关数据,php,codeigniter,orm,codeigniter-datamapper,Php,Codeigniter,Orm,Codeigniter Datamapper,我不明白如何做到以下几点: 假设我有一张产品表和一张照片表。1产品有很多照片。因此,在产品模型中,我会: var $has_many = array("category", "photo"); 现在,我想得到所有的产品,并将他们的每一张照片与他们联系起来。我该怎么做?目前,在我的控制器中,我正在浏览每个产品,查询照片,并以这种方式传递一个单独的数组。这并不理想。我应该能够把每张照片直接系到特定的产品上没有 从逻辑上讲,这是可行的,但事实并非如此 $product = new Product;
var $has_many = array("category", "photo");
现在,我想得到所有的产品,并将他们的每一张照片与他们联系起来。我该怎么做?目前,在我的控制器中,我正在浏览每个产品,查询照片,并以这种方式传递一个单独的数组。这并不理想。我应该能够把每张照片直接系到特定的产品上没有
从逻辑上讲,这是可行的,但事实并非如此
$product = new Product;
$products = $product->get_by_related_category('name', $where);
$photos = $product->photo->get();
明白我的意思了吗?我希望将$products变量传递给我的视图,能够通过它进行foreach,并将一组照片绑定到每个产品对象
我怎样才能做到这一点?还是有更好的方法
谢谢 对于具有多个关系的数据库,您基本上有两种方法可以使用SQL获取相关信息: 您可以在products.id=photos.product\u id上的products left外部联接photos中联接其他表,如select products.*、photos.*。这样,您将拥有重复的产品数据,因此需要相应地处理结果。不幸的是,它不直接支持这一点,它会创建重复的产品,其中每个产品在您的案例中都有一张相关的照片 您可以运行两个查询,首先从products中获取products select*,其中。。。然后获取带有所选产品id的照片,从产品id所在的照片中选择*。。。并整理出哪些照片行应该去哪些产品。DMZ中没有内置的功能,但下面是我为扩展DataMapper类的模型基类编写的代码,该类可以像这样使用:
$products = new Product;
$products = $products
->get_by_related_category('name', $where) // first get the parent objects
->load_related('photo'); // then load in the related ones inside them
foreach ($products as $product) {
// unique product instances as before
foreach ($product->photo as $photo) {
// and every product has a list of related photos
// for each product individualy
}
}
下面的方法将收集父对象的id,在where_in中使用id运行一个SQL查询,并对父对象的相关字段对象的结果进行排序。不幸的是,它有点长,不支持多对多关系
我现在正在探索DM,我需要同样的功能。起初,另一个答案中与load_相关的函数似乎就是解决这个问题的方法。 不过我做了一些进一步的研究。我找到了另一个问题的答案,这让我思考,如果没有一种方法可以自动填充一些关系。 嗯,有 如果在模型中建立关系,则可以设置此“选项”
//Instead of doing this:
var $has_many = array('user_picture');
//Do this
var $has_many = array(
'user_picture' => array(
'auto_populate' => TRUE,
),
);
现在,图片将在用户对象中可用
foreach ($u as $user) {
foreach ($user->user_picture as $picture) {
// Do your thing with the pictures
}
}
我在文件上找到的
享受吧 我想我找到了一个更好的解决方案,它也适用于多对多关系。@Brainfeeder,你让我好奇,你发现了什么?检查我发布的答案:但是,如果你有大量相关对象,你的解决方案可能会更好。我现在的做法是在你需要或不需要的时候加载它们。。。但对于我需要的数据,它是好的。
foreach ($u as $user) {
foreach ($user->user_picture as $picture) {
// Do your thing with the pictures
}
}