首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Laravel 5-使用模型进行查询,获得不同模型的结果。

Laravel 5-使用模型进行查询,获得不同模型的结果。
EN

Stack Overflow用户
提问于 2016-02-28 22:09:41
回答 1查看 728关注 0票数 0

问题

是否可以通过与最初进行查询的模型不同的模型返回模型查询结果?

例如,如果我们有两个模型,ModelAModelB,并且获取一些数据库结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$modelA = new ModelA;

$results = $modelA->all();

dd($results);

它可以以某种方式返回ModelA对象,而不是ModelA对象的集合吗?例如,所需的输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Collection {#325 ▼
    #modelA_Table: Array:4 [0 => ModelB { #297}
        1 => ModelB { #306}
        2 => ModelB { #311}
        3 => ModelB { #318}
    ]
}

上下文

关系是一个分类层次结构,其中ModelBModelA的子分类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ModelA extends Model {
    protected $table = 'ModelA_Table';

    protected $fillable = [];

    private $discriminator = 'a_type';

    public function __construct(array $attributes = array()){
        $this->initialize();
        parent::__construct($attributes);
    }

    private function initialize() {
        $this->fillable = array_merge($this->fillable, $this->fillables());
    }

    private function fillables() {
        return [
            'a_name',
            'a_type'
            'a_price'
        ];
    }

}

class ModelB extends ModelA {

    protected $fillable = [];

    public function __construct(array $attributes = array()){
        $this->initialize();
        parent::__construct($attributes);
    }

    private function initialize() {
        $this->fillable = array_merge($this->fillable, $this->fillables());
    }

    private function fillables() {
        return [
            'b_width',
            'b_height'
        ];

    }
}

这两个模型都是通过单表继承(ModelA_Table)持久化的单个实体的不同分类单元(分类级别)。

类推-总则:具体::ModelA : ModelB ::Vehicle :卡车

回到代码中,当ModelB被实例化时,它将通过构造函数中的初始化()将自己的填充附加到其继承的父-填充项中。如果ModelB可以继承ModelA的可填充性,则相反是不正确的;ModelA不能继承ModelB的可填充项。我可以要求卡车->find(1)并同时获得卡车和车辆属性,但是Vehicle->find(1)只会给我车辆属性,因为Vehicle (一般分类法)不能从它的子类继承(从特定的分类法)。

这就让我呆在现在的地方。

基本上,如果ModelA是Vehicle,而ModelB是Car,我需要这样做:

1)车辆模型按id取行

2)车辆模型着眼于场“a_type”

( 3)“a_type”将是“汽车”、“摩托车”或“卡车”等。

4)返回的水合对象将属于“a_type”类

使用ModelA查询,使用ModelB获取结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-29 09:25:00

我用杰夫·马德森的解决方案修改了雄辩模型的newFromBuilder方法解决了这个问题。

Model.php:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function newFromBuilder($attributes = array())
{
    $instance = $this->newInstance(array(), true);

    $instance->setRawAttributes((array) $attributes, true);

    return $instance;
}   

在扩展类时覆盖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function newFromBuilder($attributes = array())
{
    $class = $this->{$this->discriminator} . ucwords($attributes->status);
    $instance = new $class;
    $instance->exists = true;
    $instance->setRawAttributes((array) $attributes, true);
    return $instance;
}  

新的类是$class,它是检索到的判别器字段的值,该字段由属性discriminator指定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35692978

复制
相关文章
在 Laravel Eloquent 模型类中使用作用域进行查询
在通过 Eloquent 模型实现增删改查这篇教程中,我们已经学习了如何在 Eloquent 模型类中进行各种查询,但是这些查询大多需要手动调用查询构建器提供的各种方法来实现。如果有一些查询需要在多个地方调用,那么在每个地方都要编写同样的代码,有没有什么办法对这种场景下的查询代码进行优化呢?
学院君
2021/01/22
2.5K0
laravel 模型Eloquent ORM 查询
up前面玩了 DB 查询,但是laravel开发基本不怎么使用db方式查询,应该有更强大的 模型 Model
风清醉
2019/12/18
4.4K0
Eclipse中java获得mysql的查询结果集
本文介绍了在Java中如何获取MySQL数据库的查询结果集,并对代码进行了详细的解释和注释。包括使用DriverManager类来加载数据库驱动、使用Connection对象创建与数据库的连接、使用Statement对象创建SQL语句、使用ResultSet对象获取查询结果集、使用next()方法遍历结果集、使用getXXX()方法获取结果集中的数据以及使用close()方法关闭数据库连接。
别先生
2017/12/29
4.9K0
Eclipse中java获得mysql的查询结果集
EasyGBS云端录像查询结果跟实际的查询结果不同调整方法
近期我们一直在对EasyGBS的云端录像做测试,其中一个重要原因就是广大用户对云端录像的要求不断提高,因此对于云端录像的检查仍然是必不可少的一个环节。在测试过程中,我们就发现在云端录像的查询结果跟想要查询的结果不同。
TSINGSEE青犀视频
2021/08/10
1.5K0
EasyGBS云端录像查询结果跟实际的查询结果不同调整方法
使用高斯混合模型对不同的股票市场状况进行聚类
通过过去的十年的发展,普通人越来越容易进入股票市场,每天进出市场的资金量创历史新高。
deephub
2021/11/23
1.6K0
Laravel的模型事件 入门
creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored
无道
2020/01/24
1.2K0
pycaret模型分析之绘制模型结果
分析训练完成的机器学习模型的性能是任何机器学习工作流程中必不可少的步骤。 在PyCaret中分析模型性能就像编写plot_model一样简单。 该函数将受训的模型对象和图的类型作为plot_model函数中的字符串。
西西嘛呦
2020/10/27
8240
pycaret模型分析之绘制模型结果
【Laravel系列4.4】模型Eloquent ORM的使用(二)
对于模型的探索我们还将继续。上篇文章中,只是简单地通过模型操作了一下数据库,并且学习了一下关联操作的知识。今天,我们继续学习模型中别的一些好玩的东西,不过,我们不会继续深入地学习模型中别的相关技巧。因为这些东西,都已经写在了官方文档中,而对于这个系列的文章来说,入个门,然后搞清楚原理才是最重要的,对于怎么使用这个事,大家自己好好研究就好了。而且,关于使用的内容,网上也有很多文章以及视频教程了,我也就不走别人的老路咯。
硬核项目经理
2023/03/03
2.8K0
【Laravel系列4.4】模型Eloquent ORM的使用(二)
使用 AutoMapper 自动映射模型时,处理不同模型属性缺失的问题
使用 AutoMapper 可以很方便地在不同的模型之间进行转换而减少编写太多的转换代码。不过,如果各个模型之间存在一些差异的话(比如多出或缺少一些属性),简单的配置便不太行。本文帮助你解决这个问题。
walterlv
2023/10/23
6630
不同训练模型的比较
在上一篇文章结尾,我们提到了,与使用SGD(随机梯度下降)和冲量训练的模型相比,L-BFGS方法产生不同误差的解决方法。所以,有一个问题就是什么样的解决方法泛化能力最强,而且如果它们关注的方向不同,那么对于单个方法它们又是如何做到泛化能力不同的。 为了使分析更加容易,但至少保证符合实际,我们以“werewolf”为主题训练了一个线性SVM 分类器(W,bias)。换句话说,所有包含这一主题的电影都被标记为“+1”,而且我们随机的抽样“剩下的”电影,并将其标记为“-1”。至于特征,我们使用1500多个高频的关
用户1737318
2018/06/05
9100
【Laravel系列4.3】模型Eloquent ORM的使用(一)
先来说说 ORM 是什么,不知道有没有不清楚这个概念的小伙伴,反正这里就一道科普一下算了。ORM 的全称是 Obejct Relational Mapping ,翻译过来就是 对象关系映射 ,再说得直白一点,就是用 面向对象 里的对象来 映射 数据库中的数据。我们在关系型数据库中,一行数据就可以看成是一个对象,整个表就可以看成是这个对象的列表。这就是非常简单地针对 ORM 的理解。
硬核项目经理
2023/03/03
8.9K0
【Laravel系列4.3】模型Eloquent ORM的使用(一)
3分钟短文:Laravel模型OR查询避坑指南
laravel模型提供了query builder对象用于组装查询条件并生成PSD查询语句,从而与数据库对话。如果使用and约束条件,这并不难写,无非是 A 成立且 B 成立且 C 成立,然后返回某某数据。
程序员小助手
2020/09/10
1.4K0
PyTorch 学习 -5- 模型初始化
通过访问torch.nn.init的官方文档链接 ,我们发现torch.nn.init提供了以下初始化方法:
为为为什么
2023/07/24
5150
点击加载更多

相似问题

laravel 5-获得相关的模型值

11

Laravel:模型没有查询结果

22

Laravel模型无查询结果

11

Laravel -没有模型的查询结果

10

如何用一个语句获得不同的查询(模型)结果?- laravel

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文