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都要匹配

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 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

9个月前 评论
讨论数量: 3
sanders

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

9个月前 评论
RedHatj (楼主) 9个月前

您可以尝试通过以下步骤在订单信息中展示该订单的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

9个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!