lỗi dd và show value trong Laravel
chào mọi người, m đang làm project về lar nhưng k rõ lỗi thế này thì ntn? ai giải thích hộ m với
m dùng 2 code để check
{{dd($post_cate_i->post_title)}}: code này show ra value, value nó nằm gần cuối ảnh nhé bạn
{{$post_cate_i->post_title}}: code này thì lại bị lỗi,
mà m check object thì nó trả về true, k rõ nó là lỗi ntn
bạn nào biết về lỗi này giúp m gỡ lỗi với nhé
Thanks All
2 CÂU TRẢ LỜI
Mình nghĩ có thể là do có một cái category của bạn không có bài viết nào, nên $post_cate[$a]->first()
sẽ trả về null và gây lỗi.
Bạn có chắc chắc là trong tất cả các category đều có bài viết ko?
chắc vậy đó ban, để m đặt điều kiện nếu mảng rỗng thì m sẽ k hiện lên xem ntn
Đầu tiên để fix lỗi này bạn sửa lại code thành
{{$post_cate_i ? $post_cate_i->post_title : ''}}
Giải thích một chút: Do bạn chưa show toàn bộ code nên mình đưa ra như này
- Mình thấy bạn đang dùng array với collection khá lộn xộn. Ví dụ $post_cate là 1 mảng collection thay vì viết
$post_cate[$a]->first()
, bạn hãy convert hẳn về dạng collection hoặc array để thống nhất kiểu dữ liệu. dd
dùng hàm này mọi tiến trình sẽ dừng lại, chính vì thế trang sẽ chỉ in ra kết quả đầu tiên trong mảng$post_cate
, nên các giá trị sau bị lỗi mà bạn không biết, bạn có thể dùng var_dump() để debug trong TH này, sẽ biết $post_cate_i nào đang không phải object.
đây nhé bạn m show toàn bộ code trong controller và code ngoài view
m dùng {{-- {{dd($post_cate_i->post_title)}} --}} {{-- {{$post_cate_i->post_title}} --}} cạnh nhau để test luôn bạn, m dùng shift để lấy giá trị đầu tiên của mảng và dùng luôn first(), thì giá trị đầu tiên đó là 1 object vì m đã check is_object thì nó trả về 1,
foreach($cate_all as $ct){ if($ct->cate_parent_id == 0){ ++$i; $cate_sub = Cate::where('cate_parent_id', $ct->id)->get(); $count_cate_sub = Cate::where('cate_parent_id', $ct->id)->count(); // dd($count_cate_sub);
// dd($cate_sub);
if($count_cate_sub != 0){
foreach($cate_sub as $cate_s){
$cate_sub_id[] = $cate_s->id;
}
$post_cate[$i] = Post::whereIn('post_cate_id', $cate_sub_id)->orderBy('id', 'DESC')->take(6)->get();
// $post_cate[$i] = Post::whereIn('post_cate_id', $cate_sub_id)->orderBy('id', 'DESC')->take(6)->get()->toArray();
// $post_cate = $post_cate2->toArray();
}else{
$post_cate[$i] = Post::where('post_cate_id', $ct->id)->orderBy('id', 'DESC')->take(6)->get();
// $post_cate[$i] = Post::where('post_cate_id', $ct->id)->orderBy('id', 'DESC')->take(6)->get()->toArray();
// $post_cate = $post_cate2->toArray();
}
}else{
$post_cate[$i] = Post::where('post_cate_id', $ct->id)->orderBy('id', 'DESC')->take(6)->get();
// $post_cate[$i] = Post::where('post_cate_id', $ct->id)->orderBy('id', 'DESC')->take(6)->get()->toArray();
// $post_cate = $post_cate2->toArray();
}
// if($ct->cate_parent_id ==0)
// $post_cate[$i] = Post::where('post_cate_id', $ct->id)->orderBy('id', 'desc')->take(5)->get()->toArray();
// }
}
code trong controller, m dùng get đẻ tạo collection và m đặt vào mảng để lấy giá trị theo cate
code ngoài view
@for ($a = 1; $a <= $i; $a++) <section class="home_section1">
<div class="jl_grid_wrap_f jl_clear_at g_3col">
<div class="jl-roww content-inner jl-col3 jl-col-row">
<div class="jl_sec_title">
<h3 class="jl_title_c"><span>Editors Picks Post</span></h3>
<p>This is an optional subtitle for post section</p>
</div>
</div>
</div>
<div class="jl_mright_wrapper jl_clear_at">
<div class="jl_mix_post">
{{-- {{$post_cate_i = array_slice($post_cate[$a], 0)}} --}}
<?php $post_cate_i = $post_cate[$a]->first(); ?>
{{-- {{is_object($post_cate_i)}} --}}
{{-- {{dd($post_cate_i->post_title)}} --}}
{{-- {{$post_cate_i->post_title}} --}}
{{-- <?php echo $post_cate_i['post_title']; ?> --}}
{{-- {{$post_cate_i->post_title}} --}}
{{-- @foreach($post_cate_i as $pc_i) --}}
@@
dưới là hết code vòng lặp,
tại sao m dùng mảng để m lấy 1 collection gắn vào mảng rồi ra ngoài view m sẽ dùng for lặp để lấy giá trị trong mảng thì nó là 1 collection,
m lấy collection đầu tiên check object thì nó trả về true, m dùng cái trên thì bị lỗi đó bạn
k hiểu
@phuth bạn xem cái mảng $post_cate
n in ra dữ liệu ra sao
@foreach ($post_cate as $post)
{{ var_dump($post) }}
@endforeach
m cũng test trước rồi
no là mảng