laravel一对一关系中如何设置多个字段的匹配

ModelA


        protected $connection = 'XXXX'protected $table = "XXXX";

        public function PartnerPrice()
        {
        return $this->hasOne(PartnerPrice::class,'sku','jdsku');
        }

ModelB

        protected $connection = 'XXXX'protected $table = "XXXX";
        public function PartnerPrice()
        {
        return $this->belongsTo(Finance::class,'jdsku','sku');
        }

Controller

protected function grid()
    {
        $grid = new Grid(new Finance());
        $grid->column('ID', __('id'));
        $grid->column('JDorderCode', __('订单号'));
        //需要添加一列price,但数据ModelA的jdsku、handlename和ModelB的sku、handlename必须匹配
        return $grid;

2. 问题描述?#

在 laravel admin 中
数据库 A 是订单数据,里面有该订单对应的 sku 和 handlename
数据库 B 是 sku 数据,里面有 handlename 的不同 sku,和对应的 price

3. 您期望得到的结果?#

我需要在订单信息里展示该订单的 sku 和 handlename 对应的 price,需要 sku 和 handlename 都要匹配

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

您可以尝试通过以下步骤在订单信息中展示该订单的 sku 和 handlename 对应的 price:

  1. 首在 Controller 的 grid() 方法中,将 ModelA 和 ModelB 关联起来,以便使用它们的属性和关系。
use App\Models\ModelA;
use App\Models\ModelB;

protected function grid()
{
    $grid = new Grid(new Finance());
    $grid->column('ID', __('id'));
    $grid->column('JDorderCode', __('订单号'));

    // 添加一列price,并从ModelB获取对应的价格
    $grid->column('price', __('Price'))->display(function () {
        $sku = $this->jdsku; // 获取当前行的jdsku

        // 使用ModelA查询匹配的handlename
        $handlename = ModelA::where('jdsku', $sku)->value('handlename');

        // 使用ModelB查询匹配的价格
        $price = ModelB::where('sku', $sku)->where('handlename', $handlename)->value('price');

        return $price;
    });

    return $grid;
}
  1. 确保 hasOne()belongsTo() 方法中的关联字段和关联模型类名是正确的。

这样,当在 laravel admin 中查看订单信息时,将会显示每个订单的 sku 和 handlename 对应的 price

1年前 评论
讨论数量: 3
sanders

本周第二次推荐这个包: github.com/topclaudy/compoships

1年前 评论
RedHatj (楼主) 1年前

您可以尝试通过以下步骤在订单信息中展示该订单的 sku 和 handlename 对应的 price:

  1. 首在 Controller 的 grid() 方法中,将 ModelA 和 ModelB 关联起来,以便使用它们的属性和关系。
use App\Models\ModelA;
use App\Models\ModelB;

protected function grid()
{
    $grid = new Grid(new Finance());
    $grid->column('ID', __('id'));
    $grid->column('JDorderCode', __('订单号'));

    // 添加一列price,并从ModelB获取对应的价格
    $grid->column('price', __('Price'))->display(function () {
        $sku = $this->jdsku; // 获取当前行的jdsku

        // 使用ModelA查询匹配的handlename
        $handlename = ModelA::where('jdsku', $sku)->value('handlename');

        // 使用ModelB查询匹配的价格
        $price = ModelB::where('sku', $sku)->where('handlename', $handlename)->value('price');

        return $price;
    });

    return $grid;
}
  1. 确保 hasOne()belongsTo() 方法中的关联字段和关联模型类名是正确的。

这样,当在 laravel admin 中查看订单信息时,将会显示每个订单的 sku 和 handlename 对应的 price

1年前 评论