DB::Table与Model::get()上的Laravel或PHP foreach问题
下面的代码可以正常工作:DB::Table与Model::get()上的Laravel或PHP foreach问题,php,laravel,eloquent,php-7,laravel-7,Php,Laravel,Eloquent,Php 7,Laravel 7,下面的代码可以正常工作: $data = Structures::select("id", "parent_id", "category", "type", "subType", "variant", "description") ->orderBy('category') ->orderBy('type')
$data = Structures::select("id", "parent_id", "category", "type", "subType", "variant", "description")
->orderBy('category')
->orderBy('type')
->orderBy('subType')
->orderBy('variant')
->get() ;
return $this->fillCategories($data) ;
函数的作用是用父子关系填充JSON树
但是,下面的代码不起作用
$data = DB::table("categories AS t1")
->select("t1.id", "t1.name AS category", "t2.id as typeId", "t2.name as type", "t3.id as subTypeId", "t3.name as subType", "t4.id as variantId", "t4.name as variant")
->leftJoin("categories AS t2", "t2.parent_id", "=", "t1.id")
->leftJoin("categories AS t3", "t3.parent_id", "=", "t2.id")
->leftJoin("categories AS t4", "t4.parent_id", "=", "t3.id")
->whereNull("t1.parent_id")
->orderBy("t1.name")
->orderBy("t2.name")
->orderBy("t3.name")
->orderBy("t4.name")
->get() ;
foreach ($data as $v) {
Log::info("cat: " . json_encode($v));
}
return $this->fillCategories($data) ;
本地日志返回值,但是当$data
被传递到fillCategories()
时,函数中的foreach会忽略$data
fillCategories()
我现在假设将
$data
从DB::table
传递到函数,而不是Facades\App\Model\Structures::get()
在翻译过程中不知怎么地丢失了。谢谢Faiz,显然orderBy
是问题所在!(!)如果我将其取出,fillCategories()
foreach处理数据
$data = DB::table("categories AS t1")
->select("t1.id", ...)
->leftJoin("categories AS t2", "t2.parent_id", "=", "t1.id")
->leftJoin("categories AS t3", "t3.parent_id", "=", "t2.id")
->leftJoin("categories AS t4", "t4.parent_id", "=", "t3.id")
->whereNull("t1.parent_id")
->orderBy("t1.name")
->orderBy("t2.name")
->orderBy("t3.name")
->get() ;
这很有效。也许泰勒·奥特威尔能告诉我为什么 它们是不同的查询,可能其中一个没有返回任何结果谢谢您的评论。这是我最初的想法。它们都返回结果。我查过了。那就没有足够的钱离开这里了。。你将一个集合传递给这个方法,如果它不是空的,那么foreach将运行(迭代它),因此根据你显示的内容,集合必须是空的,才能到达日志语句[2020-10-04 08:13:42]local.INFO:fillCat:data=[{“id”:11,“parent\u id”:null,“category”:“Structure”,“type”:“Lampole”,“subType”:null,“变体”:空,“描述”:“Lampole”},{“id”:13,“parent_id”:11,“category”:“Structure”,“type”:“Lampole”,“subType”:“QB”,“variant”[2020-10-04 08:13:42]local.INFO:fillCat:data=[{“id”:297,“category”:“Buildings”,“typeId”:297,“type”:“CAB”,“Subsubtype”:空,“subType”:空,“variantId”:空,“变体”:空,{“id”:311”,“category”:“Buildings”,“typeId”:“Buildings”,“typeId”:”“:311,“键入”:“Guardokay所以它正在到达……那么问题是什么?”?
$data = DB::table("categories AS t1")
->select("t1.id", ...)
->leftJoin("categories AS t2", "t2.parent_id", "=", "t1.id")
->leftJoin("categories AS t3", "t3.parent_id", "=", "t2.id")
->leftJoin("categories AS t4", "t4.parent_id", "=", "t3.id")
->whereNull("t1.parent_id")
->orderBy("t1.name")
->orderBy("t2.name")
->orderBy("t3.name")
->get() ;