Jak dychtivým zatížení funkce ‚uživatelem‘ z výmluvných vztahu dříve nastavené (User modelu) v regulátoru, když mám tuto situaci

hlasů
0

Poznámka: Vztah mezi pošt a Tag modelu je mnoho mnoho a vztah mezi uživatelem a model Post je mnoho. Vše funguje dobře jen mám příliš mnoho dotazů od uživatelů, kde users.id ... když debbug ji. Chci používat dychtivého zatížení pro uživatelské funkce, v tomto případě v mém funkci regulátoru. Jak mohu použít ji jakowith('user')->get();

Dík.

To je můj web.php trasa:

Route::get('/posts/tags/tag/{tag}', 'TagsController@show');

Tohle je moje funkce ovladač pro které:

<?php

namespace App \ Http \ Controllers;

pouze osvětlit \ Http \ Request;

používat App \ Tag; používat App \ Post;

třída TagsController rozšiřuje Controller {

public function __construct()

{

    $this->middleware('auth')->except(['index']);

}



public function index(Tag $tag)

{


    return view('posts.index', compact('tag'));
}

public function create()

{
    return view('tags.create');
}

public function store(Request $request)

{

    $this->validate(request(), [

        'name' => 'required|max:255'

    ]);

    Tag::create([

        'name' => request('name')            

    ]);


    return redirect('/');
}

public function show(Tag $tag)
{


    return view('tags.show', compact('tag'));
}

}

To je můj show.blade.php:

@foreach ($tag->posts as $post)

              <div class=col-sm-6 >

                  <div class=card style=margin-bottom:15px;>
                    <img class=card-img-top src=https://neilpatel-qvjnwj7eutn3.netdna-ssl.com/wp-content/uploads/2015/07/seoimage.jpg height=270px alt=Card image cap>
                    <div class=card-body>
                      <h5 class=card-title>
                          <a href=/posts/{{ $post->id }}>
                          {{ $post->title }}
                        </a>
                      </h5>
                      <p class=card-text>
                       {{ substr(strip_tags($post->body), 0, 50) }}{{ strlen(strip_tags($post->body)) > 50 ? ... :  }}
                      </p>
                      <p class=card-text><small class=text-muted>{{ $post->user->name }} on
                                {{ $post->created_at->toFormattedDateString() }}</small></p>
                      <hr>
                      <a href=/posts/{{ $post->id }} class=btn btn-warning>Go somewhere</a>
                    </div>
                  </div>
                </div>
@endforeach

To je moje dotazy (obrázky níže):

DOTAZY IMAGE 1

DOTAZY IMAGE 2

Položena 07/11/2018 v 23:33
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
0

Můžete použít kombinaci dychtivým nakládku a líné dychtivým zatížení ve vašem regulátoru show()metodou. Zkuste něco takového:

public function show(Tag $tag)
{
    $tag->load(['posts' => function($query) {   // lazy eager load posts
        $query->with('user');                   // eager load users
    }]);

    return view('tags.show', compact('tag'));
}

https://laravel.com/docs/5.7/eloquent-relationships#lazy-eager-loading

Odpovězeno 08/11/2018 v 02:20
zdroj uživatelem

hlasů
0

V ovladači, můžete to udělat takhle níže a kód čepel zůstane stejný.

$posts = Post::with('user')->get();

nebo

$posts = Post::with(['user'])->get();

Doufám, že to funguje u vás.

Odpovězeno 08/11/2018 v 01:28
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more