[英]Laravel 5 add results from query in a foreach to array
我的Laravel 5應用程序中有問題。 我的控制器方法包含一個foreach,它應該在以前的Eloquent-result-array(稱為$ zipcodes)上進行迭代。 因此,每個郵政編碼都用於填充查詢,結果返回一個Article對象(名為$ article)。 每次迭代結束時,都應將Article-result添加到一個數組($ articles)中,該數組在我的方法末尾用於在頁面上顯示Articles。 也許有一個更好的選項來執行Article-query,不是每次迭代都可以,但是我不知道怎么做。
UPDATE
這適用於我的問題,而無需在foreach中執行查詢: Laravel從給定數組中查詢中的多個where子句
我的代碼現在是
// grabs all zipcodes matching the distance
$zipcodes = $this->getZipcodes($zipCoordinateId, $distance);
foreach ($zipcodes AS $key=>$val)
{
$zipcodes[$key] = (array) $val;
}
$codes = array_column($zipcodes, 'zc_zip');
$articles = Article::whereIn('zipcode', $codes)->get();
return view('pages.intern.articles.index', compact('articles'));
更新結束
我的SearchController:
<?php
namespace App\Http\Controllers;
use App\Article;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
class SearchController extends Controller
{
public function getSearch(Request $request)
{
if(($request->has('zipcode'))) {
$zipcode = $request->input('zipcode');
$distance = $request->input('distance');
$zipCoordinateId = $this->getZipCoordindateId($zipcode);
$zipcodes = $this->getZipcodes($zipCoordinateId, $distance);
$articles = array();
foreach($zipcodes as $value) {
//$zipcode = $zipcodes[0]->zc_zip; // this is working
$zipcode = $value->zc_zip;
$article = Article::where('zipcode', $zipcode)->get();
// add the $article each iteration to $articles
}
return view('pages.articles', compact('articles'));
} else {
return redirect('/articles');
}
}
public function getZipCoordindateId($value) {
$result = DB::table('zip_coordinates')
->where('zc_zip', '=' , $value)
->orWhere('zc_location_name', 'LIKE', $value)
->pluck('zc_id');
return $result;
}
public function getZipcodes($id, $distance) {
$result = DB::select(
DB::raw("
SELECT dest.zc_zip,
ACOS(
SIN(RADIANS(src.zc_lat)) * SIN(RADIANS(dest.zc_lat))
+ COS(RADIANS(src.zc_lat)) * COS(RADIANS(dest.zc_lat))
* COS(RADIANS(src.zc_lon) - RADIANS(dest.zc_lon))
) * 6380 AS distance
FROM zip_coordinates AS dest
CROSS JOIN zip_coordinates AS src
WHERE src.zc_id = :id
HAVING distance < :distance
ORDER BY distance"), array('id' => $id, 'distance' => $distance));
return $result;
}
}
我的觀點:
@extends('layouts.default')
@section('content')
<h1>All Articles</h1>
<hr/>
<search>
{!! Form::open(['url' => 'intern/search']) !!}
{!! Form::text('zipcode', null, ['class' => 'form-control']) !!}
{!! Form::select('distance', [
'5' => '5 km',
'10' => '10 km',
'25' => '25 km',
'50' => '50 km',
], null, ['class' => 'form-control']) !!}
{!! Form::submit('Suchen', ['class' => 'btn btn-success']) !!}
{!! Form::close() !!}
</search>
@foreach($articles as $article)
<article>
<h2>
<a href="{{ url('/articles', $article->id) }}">{{ $article->name }}</a>
</h2>
<div>
<label>Description:</label>
<p>{{ $article->description }}</p>
</div>
<div>
<label>ZIPCODE:</label>
{{ $article->zipcode }}
</div>
<div>
<label>Published:</label>
{{ $article->published }}
</div>
<div>
<label>Rank:</label>
{{ $article->rank }}
</div>
</article>
<hr/>
@endforeach
@stop
希望你能幫助我,在此先謝謝你。 quantatheist
編輯
當我使用
foreach($zipcodes as $key => $value)
{
$articles[] = Article::where('zipcode', $value->zc_zip)->get();
}
print_r($articles);
搜索時會顯示另一個郵政編碼,並顯示我文章的更新郵政編碼(目前,我的數據庫中有三篇文章,第一篇都包含郵政編碼,這在我的新郵政編碼搜索范圍內):
Array
(
[0] => Illuminate\Database\Eloquent\Collection Object
(
[items:protected] => Array
(
[0] => App\Article Object
(
[fillable:protected] => Array
(
[0] => name
[1] => description
[2] => profile
[3] => driverlicense
[4] => zipcode
[5] => published
[6] => rank
[7] => contact
[8] => note
[9] => pictures
[10] => publisher
)
[connection:protected] =>
[table:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
[id] => 5
[name] => Test1
[description] => Lorem ipsum dolor sit amet, consetetur
[profile] => Lorem ipsum dolor sit amet, consetetur
[driverlicense] => yes
[published] => no
[rank] => 10
[contact] => 1
[pictures] =>
[zipcode] => 89429
[note] =>
[publisher] => 1
[created_at] => 2015-11-04 01:45:18
[updated_at] => 2015-11-04 10:07:24
)
[original:protected] => Array
(
[id] => 5
[name] => Test1
[description] => Lorem ipsum dolor sit amet, consetetur
[profile] => Lorem ipsum dolor sit amet, consetetur
[driverlicense] => yes
[published] => no
[rank] => 10
[contact] => 1
[pictures] =>
[zipcode] => 89429
[note] =>
[publisher] => 1
[created_at] => 2015-11-04 01:45:18
[updated_at] => 2015-11-04 10:07:24
)
[relations:protected] => Array
(
)
[hidden:protected] => Array
(
)
[visible:protected] => Array
(
)
[appends:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
[dates:protected] => Array
(
)
[dateFormat:protected] =>
[casts:protected] => Array
(
)
[touches:protected] => Array
(
)
[observables:protected] => Array
(
)
[with:protected] => Array
(
)
[morphClass:protected] =>
[exists] => 1
[wasRecentlyCreated] =>
)
)
)
[1] => Illuminate\Database\Eloquent\Collection Object
(
[items:protected] => Array
(
[0] => App\Article Object
(
[fillable:protected] => Array
(
[0] => name
[1] => description
[2] => profile
[3] => driverlicense
[4] => zipcode
[5] => published
[6] => rank
[7] => contact
[8] => note
[9] => pictures
[10] => publisher
)
[connection:protected] =>
[table:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
[id] => 6
[name] => Test2
[description] => Lorem ipsum dolor sit amet, consetetur
[profile] => Lorem ipsum dolor sit amet
[driverlicense] => yes
[published] => no
[rank] => 3
[contact] => 1
[pictures] =>
[zipcode] => 89428
[note] =>
[publisher] => 1
[created_at] => 2015-11-04 01:45:38
[updated_at] => 2015-11-04 09:58:01
)
[original:protected] => Array
(
[id] => 6
[name] => Test2
[description] => Lorem ipsum dolor sit amet, consetetur
[profile] => Lorem ipsum dolor sit amet
[driverlicense] => yes
[published] => no
[rank] => 3
[contact] => 1
[pictures] =>
[zipcode] => 89428
[note] =>
[publisher] => 1
[created_at] => 2015-11-04 01:45:38
[updated_at] => 2015-11-04 09:58:01
)
[relations:protected] => Array
(
)
[hidden:protected] => Array
(
)
[visible:protected] => Array
(
)
[appends:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
[dates:protected] => Array
(
)
[dateFormat:protected] =>
[casts:protected] => Array
(
)
[touches:protected] => Array
(
)
[observables:protected] => Array
(
)
[with:protected] => Array
(
)
[morphClass:protected] =>
[exists] => 1
[wasRecentlyCreated] =>
)
)
)
[2] => Illuminate\Database\Eloquent\Collection Object
(
[items:protected] => Array
(
)
)
)
編輯2
我從$ articles = Article :: all();中打印文章,它使用相同的返回視圖('pages.articles',compact('articles))); 並顯示在同一站點上:
Illuminate\Database\Eloquent\Collection Object
(
[items:protected] => Array
(
[0] => App\Article Object
(
[fillable:protected] => Array
(
...
)
[connection:protected] =>
[table:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
...
)
[original:protected] => Array
(
...
)
[relations:protected] => Array
(
)
[hidden:protected] => Array
(
)
[visible:protected] => Array
(
)
[appends:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
[dates:protected] => Array
(
)
[dateFormat:protected] =>
[casts:protected] => Array
(
)
[touches:protected] => Array
(
)
[observables:protected] => Array
(
)
[with:protected] => Array
(
)
[morphClass:protected] =>
[exists] => 1
[wasRecentlyCreated] =>
)
[1] => App\Article Object
(
[fillable:protected] => Array
(
..
)
[connection:protected] =>
[table:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
...
)
[original:protected] => Array
(
..
)
[relations:protected] => Array
(
)
[hidden:protected] => Array
(
)
[visible:protected] => Array
(
)
[appends:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
[dates:protected] => Array
(
)
[dateFormat:protected] =>
[casts:protected] => Array
(
)
[touches:protected] => Array
(
)
[observables:protected] => Array
(
)
[with:protected] => Array
(
)
[morphClass:protected] =>
[exists] => 1
[wasRecentlyCreated] =>
)
[2] => App\Article Object
(
[fillable:protected] => Array
(
..
)
[connection:protected] =>
[table:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(..
)
[original:protected] => Array
(
..
)
[relations:protected] => Array
(
)
[hidden:protected] => Array
(
)
[visible:protected] => Array
(
)
[appends:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
[dates:protected] => Array
(
)
[dateFormat:protected] =>
[casts:protected] => Array
(
)
[touches:protected] => Array
(
)
[observables:protected] => Array
(
)
[with:protected] => Array
(
)
[morphClass:protected] =>
[exists] => 1
[wasRecentlyCreated] =>
)
)
)
所以我的print_r($ articles)的輸出應該是這樣的。
編輯3
我當前的foreach是:
foreach($zipcodes as $key => $value)
{
//$code = $zipcodes[0]->zc_zip; // working, prints out one article
//$article = Article::where('zipcode', $code)->get();
$article = Article::where('zipcode', $value->zc_zip)->get();
//print_r($article);
}
print_r($article);
您可以嘗試以下方法:
foreach($zipcodes as $key => $value)
{
$articles[] = Article::where('zipcode', $value->zc_zip)->get();
}
return view('pages.articles', compact('articles'));
視圖:
@foreach($articles as $article)
<article>
<h2>
<a href="{!! url('/articles', $article->id) !!}">{!! $article->name !!}</a>
</h2>
<div>
<label>Description:</label>
<p>{!! $article->description !!}</p>
</div>
<div>
<label>ZIPCODE:</label>
{!! $article->zipcode !!}
</div>
<div>
<label>Published:</label>
{!! $article->published !!}
</div>
<div>
<label>Rank:</label>
{!! $article->rank !!}
</div>
</article>
<hr/>
@endforeach
您已經聲明了$ articles = array(); 然后將$ article(不帶s )傳遞給緊湊函數,這就是為什么您在視圖中得到一個未定義的變量的原因,同樣,當您循環到foreach時,您必須這樣做:
@foreach($articles as $article)
....
@endforeach
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.