laravel--has方法--查看關聯關系


has()方法可以用來查詢是否有關聯關系的一個東西,一般其他的has方法 就是判斷這個里面有沒有值

$packageOrders = Company::has('packages')->get();
dd(
$packageOrders);

而這句話的has方法意思就不一樣了,他詳細的邏輯是什么呢,怎么關聯,怎么查詢的。首先看一下dd($packageOrders)輸出的東西是什么

可以看到輸出的也是company的元素,總共取到的數據是18個,如果用

$packageOrders = Company::all();
  dd($packageOrders);

all()的方法來取,可以看到打印的數據是100多個,那么has方法是用什么東西 去篩選的,導致結果數據只有18個了。

$packageOrders = Company::has('packages')->get();
這句話的詳細意思就是,先去company找和packages關聯的那張表,看他們互相匹配的id是哪些數據,大概意思是這,首先去company模型查找與之對應的
packages方法

那么packages方法是與app\CompanyPackage模型關聯的,他們關聯的ID是company_id,第三個參數表示用自己的ID值 去和companyPackage里的company_id匹配
那么到數據庫的流程就是 先去company表里查找id的值,在到company_packages表中查看company_id的值,有沒有匹配的,取出所有匹配的數據,匹配的數據取出的是company表的,不會帶出
company_packages表的數據,也就是文章開頭顯示的數據了。

那么如果現在company模型里面的packages方法,第二個參數改為package_id的話,查詢情況又會如何呢

那么  $packageOrders = Company::has('packages')->get(); 會到數據庫里查company表里的id 和 company_packages表package_id互相匹配的值 在顯示出來,
篩選就是這么篩選的,所以all()方法100多條數據,而has只有18條互相匹配的數據了





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM