首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按关系排序后,Laravel 6 id发生更改

按关系排序后,Laravel 6 id发生更改
EN

Stack Overflow用户
提问于 2020-03-27 17:54:56
回答 1查看 25关注 0票数 0

我不知道该怎么解释...

在Tinker上:

代码语言:javascript
运行
复制
$m = App\Models\Mobiliari::Buscar('5')
$m->get()
=> Illuminate\Database\Eloquent\Collection {#3038
     all: [
       App\Models\Mobiliari {#3051
         id: "5",
         entitat_id: "3",
         tipus_mobiliari_id: "2",
         descripcio: null,
         data_compra: null,
         proveidor_id: "2",
         factura: null,
         cost: ".0000",
         ubicacio_id: "2",
       },
     ],
   }

Buscar是一个过滤某些字段的函数:

代码语言:javascript
运行
复制
public function scopeBuscar($query, $filtre)
    {
        if ($filtre)
        {
            return $query->where('mobiliari.id', $filtre)
                ->orWhere('descripcio', 'like', '%'.$filtre.'%')
                ->orWhereHas('Entitat', function($q) use ($filtre) {
                    $q->where('entitat', 'like', '%'.$filtre.'%');
                })
                ->orWhereHas('TipusMobiliari', function($q) use ($filtre) {
                    $q->where('tipus', 'like', '%'.$filtre.'%');
                })
                ->orWhereHas('Proveidor', function($q) use ($filtre) {
                    $q->where('proveidor', 'like', '%'.$filtre.'%');
                })
                ->orWhereHas('Ubicacio', function($q) use ($filtre) {
                    $q->where('edifici', 'like', '%'.$filtre.'%')
                        ->orWhere('ubicacio', 'like', '%'.$filtre.'%');
                });
        }
    }

然后,当尝试通过相关表对结果进行排序时,ID会更改TE值

代码语言:javascript
运行
复制
$m->join('entitat', 'mobiliari.entitat_id', '=', 'entitat.id')->orderBy('entitat.entitat','asc')->get()
=> Illuminate\Database\Eloquent\Collection {#3041
     all: [
       App\Models\Mobiliari {#3040
         id: "3",
         entitat_id: "3",
         tipus_mobiliari_id: "2",
         descripcio: null,
         data_compra: null,
         proveidor_id: "2",
         factura: null,
         cost: ".0000",
         ubicacio_id: "2",
         entitat: "UAB Idiomes",
         rao_social: "Escola d'Idiomes Moderns Casa Convalescència SL",
       },
     ],
   }

我捕获了使用DB::enableQueryLog();和dd(DB::getQueryLog())生成的查询,在SQL Server上执行它并返回正确的ID...

有人知道或能解释为什么ID会改变吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-27 18:40:35

当您连接表时,id可能是不明确的,即使是从您的连接中,Laravel对象关系表也会采用其中一个id。

在当前表中添加select()将帮助您解决问题。如果需要,您仍然可以选择额外的列,但是如果使用其他表中的in,则在SQL中重命名这些列。

代码语言:javascript
运行
复制
->select('mobiliari.*');

因此,请尝试以下代码。

代码语言:javascript
运行
复制
$m->join('entitat', 'mobiliari.entitat_id', '=', 'entitat.id')
    ->orderBy('entitat.entitat','asc')
    ->select('mobiliari.*')
    ->get();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60883617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档