在我的Controller函数中,我调用以下代码:
$ad = Ad::activeRegular()->with('category', 'city')->limit($limit_regular_ads)->orderBy('id', 'desc')->get();
并成功返回Ad
Eloquent模型对象。此对象具有Ad.php
中定义的关系,如下所示:
class Ad extends Model
{
public function category(){
return $this->belongsTo(Category::class, 'category_id');
}
}
现在问题
但在我看来,当我尝试使用以下代码获取此Category
(vertisement)的Ad
时:
foreach($ad as $rad){
var_dump($rad->category->category_name)
}
它开火
尝试获取非对象的属性
有关信息,var_dump($rad->category)
成功打印了相关Category
对象的内容。
为什么我不能以这种方式访问对象的属性。
偶$rad->category()->category_name
会引发同样的错误。
答案 0 :(得分:3)
这是因为其中一个广告没有类别。
如果您希望仅在广告具有类别时显示名称,则可以使用optional()
帮助您:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <ctime>
#include <vector>
#include <array>
template <class T>
void myswap(T &a,
T &b)
{
T temp = a;
a = b;
b = temp;
}
int main() {
const int N = 5;
std::vector<int> vec = {112,32,11,4,7};
std::cout << "\nInit\n";
for (const auto &i:vec)
{
std::cout << i << "\t";
}
int j;
for (const auto &j:vec)
//for (int j = 0; j < vec.size(); j++)
{
while (j > 0 && vec[j] < vec[j-1])
{
myswap(vec[j], vec[j-1]);
j--;
}
}
std::cout << "\n\nFinal\n";
for (const auto &i:vec)
{
std::cout << i << "\t";
}
std::cout << "\n";
return 0;
}
或确保所有广告都有一个类别。