درود و سلام بر مهندسین گرامی🌹🌷 بنده می خوام از Defer Loading در لایو وایر استفاده کنم و وقتی paginate وجود نداره بدرستی کار می کنه، ولی و قتی paginate هست داخل render این ارور میده هر کاری می کنم نتونستم درستش کنم.!!
Call to a member function links() on array
این داخل لایووایرم هست.
public $loaded=false;
public function setLoaded()
{
$this->loaded = true;
}
public function render()
{
$ResultSearch = Product::where('title', 'LIKE', "%{$this->search}%")->paginate(5);
$products = $this->loaded ? Product::where('kindofproduct', 'dorbin')->paginate(5) : [];
return view('livewire.product.Product-of-dorbin', ['products' => $products , 'ResultSearch' => $ResultSearch]);
}
این هم Blade
<div wire:init="setLoaded" class="row text-center pr-4 " style="width: 100%;">
@foreach($products as $product)
<div class="col-sm-12 col-md-6 col-lg-3 pt-2 s">
<div class="card border ">
<div class="card-header bg-info"><h5>{{$product->title}}</h5></div>
<div class="card-body">
<p class="pt-2"
style="text-align: justify;">{{\Illuminate\Support\Str::limit($product->description,35)}}</p>
<div class="card-footer shadow">
<a class="btn btn-outline-info" href="/products/{{$product->id}}/{{$product->slug}}">اطلاعات
بیشتر</a>
</div>
</div>
</div>
</div>
@endforeach
</div>
<div class="card-footer">
{{$products->links()}}
</div>
</div>
کدت رو به این شکل بنویس اوکی میشه
<div wire:init="setLoaded" class="row text-center pr-4 " style="width: 100%;">
@if($loaded)
@foreach($products as $product)
<div class="col-sm-12 col-md-6 col-lg-3 pt-2 s">
<div class="card border ">
<div class="card-header bg-info"><h5>{{$product->title}}</h5></div>
<div class="card-body">
<p class="pt-2"
style="text-align: justify;">{{\Illuminate\Support\Str::limit($product->description,35)}}</p>
<div class="card-footer shadow">
<a class="btn btn-outline-info" href="/products/{{$product->id}}/{{$product->slug}}">اطلاعات
بیشتر</a>
</div>
</div>
</div>
</div>
@endforeach
</div>
<div class="card-footer">
{{$products->links()}}
</div>
@endif
</div>
سلام خسته نباشید.
بعد از پجینیت کردن دیتا مورد نظر میره داخل پراپرتی data
در نتیجه باید کد رو
@foreach($products['data'] as $product)
تغییر بدی.
در هر مرحله با دستور @dd
مقدار متغیر هات رو بررسی کن.
برای ارور هم بعد از پجینیت کردن مقدارت از ابجکت به ارایه تغییر میکنه.
برای از دست ندادن پرفورمنس و صدا زدن مجدد الکوئنت بهتره داخل کنترولرت از متد 'with' استفاده کنی.
بدین شکل :
$ResultSearch = Product::with('links')->where('title', 'LIKE', "%{$this->search}%")->paginate(5);
مقدار داخل with اسم متدت داخل مدل Product هستش.
هرچند این کد با هدفی که داری ظاهرا تطابق نداره اما کمکت میکنه.
مشکلی داشتی مجددا، منشن کن
@sahandi81 ممنون مهندس از راهنماییت راستش یه مقدار گیج شدم الان داخل
@foreach($products as $product)
چی بزارم یعنی منظورم اون دیتا که فرمودید و اینکه داخل
$products =$this->loaded ? Product::query()->with('products')->where('kindofproduct', 'dorbin')->orderByDesc('id')->paginate(5) : [];
with بذارم چی داخلش قرار بدم؟؟
داخل with اسم متد ریلیشنتون داخل مدل Product.
همون متدی که داخلش روابط hasmany یا hasone رو نوشتین.
به این شکل:
$products =$this->loaded ? Product::with('links')->where('kindofproduct', 'dorbin')->orderByDesc('id')->paginate(5) : [];
@sahandi81 مهندس جان من اخه نمی دونم از چه رلیشنی استفاده کنم داخل with اخه لازم نیست من رلیشنی برگردونم من مستقیم دارم از مدل product استفاده می کنم.
سلام دیتاهارو به این صورت پاس بده
return view('livewire.product.Product-of-dorbin',compact('products' , 'ResultSearch'));
@eniack ممنونم مهندس ولی تفاوتی نکرد.🙏🌸
برای من سواله کسی تاحاله نخواسته از Defer Loading در صفحه بندی استفاده کنه؟
کدت رو به این شکل بنویس اوکی میشه
<div wire:init="setLoaded" class="row text-center pr-4 " style="width: 100%;">
@if($loaded)
@foreach($products as $product)
<div class="col-sm-12 col-md-6 col-lg-3 pt-2 s">
<div class="card border ">
<div class="card-header bg-info"><h5>{{$product->title}}</h5></div>
<div class="card-body">
<p class="pt-2"
style="text-align: justify;">{{\Illuminate\Support\Str::limit($product->description,35)}}</p>
<div class="card-footer shadow">
<a class="btn btn-outline-info" href="/products/{{$product->id}}/{{$product->slug}}">اطلاعات
بیشتر</a>
</div>
</div>
</div>
</div>
@endforeach
</div>
<div class="card-footer">
{{$products->links()}}
</div>
@endif
</div>
@eniack اقا فرشید خیلی ممنونم اما این کد که شما فرمودید زدم اروری نداد ولی هیچ محصولی رو هم بر نگردوند خالی بود.
این کد داخل لایووایرم هست فکر نمی کنم مشکلی داشته باشه.
class ProductOfDorbin extends Component
{
use WithPagination;
//*******************************************************************************************
protected $paginationTheme = 'bootstrap';
protected $queryString = ['search'];
//********************************************************************************************
public $categories;
public $search;
public $loaded = false;
//-------------------------------------------------------------------------------------------------------------------
public function mount()
{
$this->categories = Category::all(); //دسته بندی ها
}
//-------------------------------------------------------------------------------------------------------------------
//برای اینکه بتونیم از سرچ در تمام صفحات استفاده کنیم
public function updatingSearch()
{
$this->resetPage();
}
public function setLoaded()
{
$this->loaded = true;
}
//-------------------------------------------------------------------------------------------------------------------
public function render()
{
$ResultSearch = Product::where('title', 'LIKE', "%{$this->search}%")->Orwhere('description', 'LIKE', "%{$this->search}%")->Orwhere('price', 'LIKE', "%{$this->search}%")->paginate(1);
$products =$this->loaded ? Product::query()->where('kindofproduct', 'dorbin')->orderByDesc('id')->paginate(5) : [];
return view('livewire.product.Product-of-dorbin',compact('products','ResultSearch'));
}
}
منم مشکلی داخل کدها نمیبینم ، لطفا یکبار query رو به این شکل بنویس
$products =$this->loaded ?Product::latest()->paginate(3) : [] ;
@eniack مهندس وقتی اینو dd می گیرم 3 تا محصول مورد نظر در دیتا بیس نشون میده.
$products =Product::query()->where('kindofproduct', 'dorbin')->orderByDesc('id')->paginate(5) ;
ولی وقتی این رو dd می گیرم یک ارایه خالی بر میگردونه
$products =$this->loaded ? Product::query()->where('kindofproduct', 'dorbin')->orderByDesc('id')->paginate(5) : [];
خب درسته چون متغیر loaded برابر false هستش وقتی متد setLoaded اجرا میشه محصول داخلش قرار میگیره ،
تب network رو باز کنید ببینید اروری وجود داره؟
@eniack مهندس عزیز خیلی لطف کردی دقیقا همون پاسخی که انتخاب کردم جواب بود فقط من wire:init بد جایی گذاشته بودم
خیلی ممنونم از وقتی که گذاشتید سلامت و پایدار باشید😍😍😍😍😍😍😍🙏🙏🙏🌺🌺🌺🌺🌺
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟