Laravel Eloquent 预加载:加入同一个表两次

2024-05-23

我有一个users表和一个约会桌子。在约会表中,我有两个用户 ID(customer_id、staff_id)。我想检索所有带有客户姓名和员工姓名的约会。

users table
id
name

appointments table
id
staff_id(user_id)
customer_id(user_id)
datetime

正如您所看到的,我必须将用户表与约会表连接两次。 通常我这样做内连接.

我们可以使用 with() 对 Laravel 雄辩的预加载做同样的事情吗?

我们可以做这样的事情:

appointments::with('users' * )->get();?
* Do something here to inner join users table twice, and read user1.name as staff_name,   user2.name as customer_name.

这是我需要的最终输出:

appointment_id
staff_id
staff_name
customer_id
customer_name
datetime

我还有一个问题,下面的查询中的第二个参数是什么?

User::with(array(
    'post'=> function() use $region {
          //what is use $region means? Can you give me an example?
     }
));

Thanks!


class T1 extends Eloquent {

    protected $table = 't1';

}

class T2 extends Eloquent {

    protected $table = 't2';

    public function customer()
    {
        return $this->belongsTo('T1','c_id');//c_id - customer id
    }
    public function staff()
    {
        return $this->belongsTo('T1','s_id');//s_id - staff id
    }
}
  1. 与“with”一起使用:

    $list = \T2::with('customer')->with('staff')->get();
    foreach ($list as $row) {
        echo 'ID: '.$row->id.', customer: '.$row->customer->name.', staff: '.$row->staff->name.'<br>';
    }
    
  2. 通过连接:

    $list = \T2::leftJoin('t1 as customer_table', 'customer_table.id','=','t2.c_id')
         ->leftJoin('t1 as staff_table', 'staff_table.id','=','t2.s_id')
         ->select('staff_table.name as staff_name','customer_table.name as customer_name')
         ->get();
    foreach ($list as $row) {
        echo 'customer: '.$row->customer_name.', staff: '.$row->staff_name.'<br>';
    }
    

关于第二个问题 - 这是针对子查询的。看文档:http://laravel.com/docs/eloquent#eager-loading http://laravel.com/docs/eloquent#eager-loading

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel Eloquent 预加载:加入同一个表两次 的相关文章

  • 在 PHP 中,有人可以解释克隆与指针引用吗?

    首先 我了解编程和对象 但以下内容对我来说 PHP 没有多大意义 在 PHP 中 我们使用 运算符来检索对变量的引用 我将引用理解为用不同变量引用相同 事物 的一种方式 如果我说例如 b 1 a b a 3 echo b 将输出 3 因为对
  • 在 Symfony3 中覆盖 Doctrine2 类型

    我想用Carbon http carbon nesbot com docs 我的 Symfony 3 2 应用程序中的对象而不是 SPL DateTime 对象 我发现了一组 DoctrineExtension 类here https gi
  • 如何找到多个列中的最小值

    我在我的 DB 3 col 中有一个值 我想在所有这些值中找到一个值 如下所述 表名 MyTable id col1 col2 col3 1 200 300 400 2 100 150 300 3 800 102 20 4 80 80 0
  • 递增字母数字组合

    我偶然发现了这篇文章 如何在 PHP 中仅使用小写字母和数字来增加字母数字字符串 https stackoverflow com questions 42866349 how to increment alphanumeric string
  • 在 PHP 中 POST Base64 编码数据

    我需要使用 cURL 将一些数据 POST 到 PHP 页面 并且该请求包含三个参数 其中两个是常规文本值 一种是Base64编码的文件 我注意到 Base64 值在传输过程中被损坏 这是发送请求的代码 filename img2 jpg
  • 如何在 Slim Framework 3 上创建中间件?

    我阅读了文档here https www slimframework com docs concepts middleware html关于创建中间件 但我必须创建哪个文件夹或文件 文档不包含此信息 在 src 文件夹下我有middlewa
  • 对于每个...休息

    每次我 打破 for each 结构 PHP Javascript 时 我都感觉很脏 所以像这样 JavaScript 示例 for object in objectList if object test true do some proc
  • 如何从 WooCommerce 中的订单获取客户详细信息?

    我有一个函数可以执行此操作 order new WC Order order id customer new WC Customer order id 我如何从中获取客户详细信息 我已经尝试了文档中的所有内容 但不知何故 只存在一些细节 但
  • 用于捕获审计跟踪的数据库设计的想法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如何维护数据库中的数据日志 我必须维护对每一行所做的每次更改的日志 这意味着我不能允许DELETE and UPDATE待执行 我怎样才能保留这
  • Windows 8.1 升级后 Apache 无法工作 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 今天从 Windows 8 升级到 Windows 8 1 后 Apache 不再工作 我上次从 Windows 7 升级到 Window
  • 带有 -noserver 的 GWT

    我正在制作一个使用 PHP 连接到 DB2 数据库的 GWT 项目 当我编译项目并将其部署到服务器 复制 WAR 目录的内容 时 它工作正常 显然在托管模式下我遇到了 SOP 问题 因为 GWT 在端口 8888 上 而 php 脚本在端口
  • 有没有多核利用NoSQL系统?

    我从昨天开始就开始使用 MongoDB 并且非常喜欢它 我正在尝试导入大量数据 20 亿行 并为其建立索引 但它似乎没有使用我的系统拥有的 8 个核心 并且导入以正常速率 60000 条记录 秒 进行 我只能想象索引这个集合中的两列可能需要
  • str_getcsv到php中的多维数组

    我有这样的 csv 值 csv data test this thing hi there this is cool dude have fun 我想获取整个 CSV 字符串并将其读入多维数组 以便得到 array array test g
  • SSL 和会话劫持/固定

    快问 SSL 是否完全防止会话劫持 固定 谢谢 不可以 例如 在以下情况下可能会发生劫持 被黑客入侵的 CA 根签署无效证书 该证书可用于发起中间人攻击 被黑客攻击的域名所有者电子邮件收件箱使黑客有可能购买经过域名验证的证书 错误的密钥策略
  • 如何检查php字符串是否只包含英文字母和数字?

    在 JS 中我使用了这段代码 if string match A Za z0 9 但我不知道如何在 PHP 中做到这一点 Use 预匹配 http php net manual en function preg match php if p
  • MySQL“LIKE”搜索不起作用

    我通过 LOAD DATA INFILE 在 MySQL 中导入了一个 txt 数据库 一切似乎都正常 唯一的问题是 如果我使用以下查询在数据库上搜索记录 SELECT FROM hobby WHERE name LIKE Beading
  • PHP - 获取类公共变量?

    请考虑下面的代码 class A public function construct class B extends A public a a public b b public c c 如何从父类中获取 B 类的公共变量而不确切知道它们是
  • 优化我的表现

    我正在开发一个使用 Zend Framework 1 11 Doctrine 2 一些 Symfony 2 组件以及其他工具和库的项目 我正在尝试使用 Xdebug 和 Webgrind 优化性能 我已经发现了一些瓶颈 例如解析 Ini 配
  • PHP:使用 UTF-8 的 strpos 和 substr

    假设我有一个很长的 UTF 8 编码字符串 并说我想检测是否 var存在于该字符串中 假设 var始终是简单的字母或 ASCII 字符数字 例如 hello123 我不需要使用mb strpos or iconv strpos正确的 因为只
  • 变量前面的@是什么意思? [复制]

    这个问题在这里已经有答案了 可能的重复 参考 这个符号在 PHP 中意味着什么 https stackoverflow com questions 3737139 reference what does this symbol mean i

随机推荐