我的Laravel 5应用程序出了问题。 我的controller-method包含一个foreach,它应该迭代先前的Eloquent-result-array(名为$ zipcodes)。因此,每个zipcode用于填充查询,该结果返回一个Article-object(名为$ article)。 迭代的每一端都应该将Article-result添加到一个数组($ articles)中,该数组在我的方法结束时用于在我的页面上显示文章。 也许有更好的选择来执行文章查询,而不是每次迭代,但我不知道如何。
更新
这适用于我的问题,而不是在foreach中执行查询:Laravel multiple where clauses in query from given array
我的代码现在是
// 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
我print_r来自$ articles = Article :: all();的文章,它使用相同的返回视图(&#39; pages.articles&#39;,compact(&#39; articles&#39;));并显示在同一网站上:
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($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);
答案 0 :(得分:0)
你可以试试这个:
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
答案 1 :(得分:0)
您已声明$ articles = array();然后你将$ article(没有 s )传递给紧凑函数,这就是为什么你在视图中得到一个未定义的变量,同样当你在foreach中循环时你必须像这样做:
@foreach($articles as $article)
....
@endforeach