繁体   English   中英

Laravel 5将查询结果添加到数组中的foreach中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM