J'ai un soucis de relation n+1 sur $note->user->name,
bien que je rajoute with('user') dans mon controller, cela ne resoud rien et deplus, le trie ne fonctionne pas, comme si tout les changements n'avait aucun impact
// NoteController
public function index(Request $request, Project $project)
{
$notes = Note::with('user')->orderByDesc('created_at')->get();
return view('note.index', compact('notes', 'project'));
}
//vue
@foreach ($project->notes as $note)
<tr>
<td>
{{ $note->id }}
</td>
<td>
{{ $note->user->name }}
</td>
<td>
{!! $note->content !!}
</td>
</tr>
@endforeach
Ce que je veux
n+1 et trier la liste par date
Ce que j'obtiens
rien, toujours un soucis de n+1 et le trie ne fonctionne pas
Pour le probleme de tri sur les notes par date, je l'ai résolu en parti
si je rajoute dans le model, un tri sur la relation notes,
ca marche, mais je ne veux pas forcement trier tout le temps
// model Project
public function notes()
{
return $this->hasMany(Note::class)->orderByDesc('created_at');
}
Dans chaque $note->user
tu fais une relation entre user
et name
Ce que tu peux essayer ce serait de récupérer directement le name:
$notes = Note::with('user.name')->orderByDesc('created_at')->get();
j'ai un joli
Call to undefined relationship [name] on model [App\Models\User].
dans mon model Note, j'ai renseigné
public function user()
{
return $this->belongsTo(User::class);
}
dans le model User
public function notes()
{
return $this->hasMany(Note::class);
}
je vois pas trop quel relation, il manque du coup
Ah oui, dans user faut une function name
En gros avec user.name
laravel va chercher le model user, et ensuite lancer la function name (qui devra retourner $this->name
)
Bonjour pour le tri tu pourrais faire ceci
$notes = Note::with(['user' => function($builder){
$builder->orderByDesc('created_at);
}])->get();
Salut,
Dans ta vue, tu boucles sur $project->notes
alors que ton with
et ton orderByDesc
sont bindés sur $notes
que tu n'utilies pas dans ta vue.