Laravel5.5:App\PageList::coupon返回关系实例错误及统计问题求助
Hey there, I see exactly what's causing your error! Let's break this down and fix it step by step.
The Root Problem
Your coupon() method in the PageList model is returning a count integer instead of a valid Laravel relationship instance. Laravel expects relationship methods to return objects like HasOne, HasMany, etc.—not raw numbers or query results. When you chain ->count() at the end of your relationship definition, you're immediately executing the query and returning a number, which breaks the framework's relationship handling.
Step 1: Fix the Relationship Method
First, update your coupon() method to return the actual relationship instance, removing the count() call:
public function coupon() { return $this->hasOne('App\PageCoupon','page_id','business_id') ->where('is_ordered','N'); }
This now correctly returns a HasOne relationship object, which Laravel recognizes as a valid association.
Step 2: Get the Count (If That's What You Need)
If your goal is to get the number of coupons where is_ordered = 'N', you have two clean options:
Option A: Add a Separate Count Method
Define a dedicated method in your PageList model to handle the count:
public function unorderedCouponCount() { // Use the existing coupon relationship to build the count query return $this->coupon()->count(); }
Then in your Blade view, call this method directly:
<p>{{ $value->unorderedCouponCount() }}</p>
Option B: Count Directly in the View
You can also call count() on the relationship instance (note the parentheses to call the method, not the property):
<p>{{ optional($value->coupon())->count() }}</p>
Step 3: Fix the View for Coupon Data (If You Need the Coupon Instance)
If you actually want to access the is_ordered field of the coupon (not just the count), your original view code will work once the relationship is fixed. You can even add a fallback for when there's no matching coupon:
<p>{{ optional($value->coupon)->is_ordered ?? 'No unordered coupon' }}</p>
Key Takeaway
Always remember: Laravel relationship methods must return a relationship instance, not query results or scalar values. You can execute queries (like count(), get(), etc.) on the relationship instance after defining it, either in a separate method or when accessing the relationship in your views/controllers.
内容的提问来源于stack exchange,提问作者shahzad1122

