راکت
حل شده

ارور مربوط به Defer Loading در لایووایر

17 پاسخ

درود و سلام بر مهندسین گرامی🌹🌷 بنده می خوام از 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="https://roocket.ir/products/{{$product->id}}/{{$product->slug}}">اطلاعات
                                    بیشتر</a>
                            </div>
                        </div>
                    </div>
                </div>
            @endforeach
        </div>

        <div class="card-footer">
            {{$products->links()}}
        </div>
    </div>
ثبت پرسش جدید

پاسخ‌ها

17
فرشید مرادی
فرشید مرادی
@eniack

تخصص: noob

بهترین پاسخ

کدت رو به این شکل بنویس اوکی میشه

 <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="https://roocket.ir/products/{{$product->id}}/{{$product->slug}}">اطلاعات
                                    بیشتر</a>
                            </div>
                        </div>
                    </div>
                </div>
            @endforeach
        </div>

        <div class="card-footer">
            {{$products->links()}}
        </div>
@endif
    </div>
Sahandi81
Sahandi81
@sahandi81

تخصص: PHP - Laravel -JS

سلام خسته نباشید.
بعد از پجینیت کردن دیتا مورد نظر میره داخل پراپرتی data
در نتیجه باید کد رو
@foreach($products['data'] as $product)
تغییر بدی.
در هر مرحله با دستور @dd مقدار متغیر هات رو بررسی کن.

برای ارور هم بعد از پجینیت کردن مقدارت از ابجکت به ارایه تغییر میکنه.
برای از دست ندادن پرفورمنس و صدا زدن مجدد الکوئنت بهتره داخل کنترولرت از متد 'with' استفاده کنی.
بدین شکل :

$ResultSearch = Product::with('links')->where('title', 'LIKE', "%{$this->search}%")->paginate(5);

مقدار داخل with اسم متدت داخل مدل Product هستش.
هرچند این کد با هدفی که داری ظاهرا تطابق نداره اما کمکت میکنه.
مشکلی داشتی مجددا، منشن کن

علیرضا مه آبادی
علیرضا مه آبادی
@aliasgharkashani1379

تخصص: در حال یادگیری لاراول

@sahandi81 ممنون مهندس از راهنماییت راستش یه مقدار گیج شدم الان داخل

 @foreach($products as $product)

چی بزارم یعنی منظورم اون دیتا که فرمودید و اینکه داخل

 $products =$this->loaded ? Product::query()->with('products')->where('kindofproduct', 'dorbin')->orderByDesc('id')->paginate(5) : [];

with بذارم چی داخلش قرار بدم؟؟

شاید پاسخ شما همین‌جا باشد

Sahandi81
Sahandi81
@sahandi81

تخصص: PHP - Laravel -JS

داخل with اسم متد ریلیشنتون داخل مدل Product.
همون متدی که داخلش روابط hasmany یا hasone رو نوشتین.
به این شکل:

 $products =$this->loaded ? Product::with('links')->where('kindofproduct', 'dorbin')->orderByDesc('id')->paginate(5) : [];
علیرضا مه آبادی
علیرضا مه آبادی
@aliasgharkashani1379

تخصص: در حال یادگیری لاراول

@sahandi81 مهندس جان من اخه نمی دونم از چه رلیشنی استفاده کنم داخل with اخه لازم نیست من رلیشنی برگردونم من مستقیم دارم از مدل product استفاده می کنم.

میلاد خسروی
میلاد خسروی
@milwad

تخصص: برنامه نویس بامزه

سلام خسته نباشید
میخواید paginate کنی؟

علیرضا مه آبادی
علیرضا مه آبادی
@aliasgharkashani1379

تخصص: در حال یادگیری لاراول

@milwad درود بله paginate به همراه Defer Loading لایووایر

فرشید مرادی
فرشید مرادی
@eniack

تخصص: noob

سلام دیتاهارو به این صورت پاس بده

        return view('livewire.product.Product-of-dorbin',compact('products' , 'ResultSearch'));
علیرضا مه آبادی
علیرضا مه آبادی
@aliasgharkashani1379

تخصص: در حال یادگیری لاراول

@eniack ممنونم مهندس ولی تفاوتی نکرد.🙏🌸

برای من سواله کسی تاحاله نخواسته از Defer Loading در صفحه بندی استفاده کنه؟

علیرضا مه آبادی
علیرضا مه آبادی
@aliasgharkashani1379

تخصص: در حال یادگیری لاراول

@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'));
    }
}
فرشید مرادی
فرشید مرادی
@eniack

تخصص: noob

منم مشکلی داخل کدها نمیبینم ، لطفا یکبار query رو به این شکل بنویس

 $products =$this->loaded ?Product::latest()->paginate(3) : [] ;
علیرضا مه آبادی
علیرضا مه آبادی
@aliasgharkashani1379

تخصص: در حال یادگیری لاراول

@eniack تفاوتی نکرد 🙏🌼

فرشید مرادی
فرشید مرادی
@eniack

تخصص: noob

یه dd از متغیر $products بگیرید ببینید محصولی داخلش هست

علیرضا مه آبادی
علیرضا مه آبادی
@aliasgharkashani1379

تخصص: در حال یادگیری لاراول

@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) : [];
فرشید مرادی
فرشید مرادی
@eniack

تخصص: noob

خب درسته چون متغیر loaded برابر false هستش وقتی متد setLoaded اجرا میشه محصول داخلش قرار میگیره ،
تب network رو باز کنید ببینید اروری وجود داره؟

علیرضا مه آبادی
علیرضا مه آبادی
@aliasgharkashani1379

تخصص: در حال یادگیری لاراول

@eniack مهندس عزیز خیلی لطف کردی دقیقا همون پاسخی که انتخاب کردم جواب بود فقط من wire:init بد جایی گذاشته بودم
خیلی ممنونم از وقتی که گذاشتید سلامت و پایدار باشید😍😍😍😍😍😍😍🙏🙏🙏🌺🌺🌺🌺🌺

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام