我无法从 Laravel6 中的相关 table(模型) 检索数据
I can't retrieve data from the related table(model) in Laravel6
我无法从相关 table 中检索数据。
有 3 个模型(tables)。
- 用户
- Chirp(有 'user_id' 作为外键)
- 单击(具有 'chirp_id' 作为外键)
然后我想从 Chirp 模型中检索用户和点击的数据。
所以我写道:
Chirp.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Chirp extends Model
{
public $timestamps = false;
protected $guarded = [];
public function user()
{
return $this->belongsTo('App\User');
}
public function clicks()
{
return $this->hasMany('App\Click');
}
}
HomeController.php
class HomeController extends Controller
{
public function index()
{
$chirps = Chirp::with(['user','clicks'])
->orderBy('posted_at', 'desc')
->get();
return view('home', ['chirps' => $chirps]);
}
}
home.blade.php
@foreach($chirps as $chirp)
<div>
<div>by
<b>{{ $chirp->user->name }}</b>
on
<small>{{ $chirp->posted_at }}</small>
</div>
<div>
<p>{{ $chirp->text }}</p>
<p>{{ $chirp->click->ip_address }}</p>
</div>
</div>
@endforeach
在home.blade.php,{{ $chirp->click->ip_address }}
无法检索并得到错误"Facade\Ignition\Exceptions\ViewException Trying to get property 'ip_address' of non-object"
但是,如果我删除它,我可以正确地检索 {{ $chirp->user->name }}
。
为什么我不能从 Chirp 模型中检索 Click 模型,而我可以从 Chirp 模型中检索用户模型?
谢谢。
Chirp 有很多点击(不是点击)。你必须在你的 blade.
中 foreach $chirp->clicks
@foreach ($chirp->clicks as $click)
<p>This is click id {{ $click->id }}</p>
@endforeach
您还需要循环点击:
@foreach($chirps as $chirp)
<div>
<div>by
<b>{{ $chirp->user->name }}</b>
on
<small>{{ $chirp->posted_at }}</small>
</div>
@foreach($chirp->clicks as $click)
<div>
<p>{{ $chirp->text }}</p>
<p>{{ $click->ip_address }}</p>
</div>
@endforeach
</div>
@endforeach
你与Chirp
和clicks
有很多关系
在这里您获得了很多点击而不是点击
@foreach($chirp->clicks as $click)
<p>{{ $click->ip_address }}</p>
@endforeach
要调试此问题,您可以执行以下步骤:
检查chirps变量是否在控制器中有任何数据。
dd($chirps);
- 如果您知道自己拥有数据,则可以采取措施使您的 blade 变得更好。
因为它是多对多的关系,所以你应该遍历数据。
@foreach($chirps as $chirp)
@foreach($chirp->clicks as $click)
<div>
<p>{{ $chirp->text }}</p>
<p>{{ $click->ip_address }}</p>
</div>
@endforeach
@endforeach
我无法从相关 table 中检索数据。
有 3 个模型(tables)。
- 用户
- Chirp(有 'user_id' 作为外键)
- 单击(具有 'chirp_id' 作为外键)
然后我想从 Chirp 模型中检索用户和点击的数据。 所以我写道:
Chirp.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Chirp extends Model
{
public $timestamps = false;
protected $guarded = [];
public function user()
{
return $this->belongsTo('App\User');
}
public function clicks()
{
return $this->hasMany('App\Click');
}
}
HomeController.php
class HomeController extends Controller
{
public function index()
{
$chirps = Chirp::with(['user','clicks'])
->orderBy('posted_at', 'desc')
->get();
return view('home', ['chirps' => $chirps]);
}
}
home.blade.php
@foreach($chirps as $chirp)
<div>
<div>by
<b>{{ $chirp->user->name }}</b>
on
<small>{{ $chirp->posted_at }}</small>
</div>
<div>
<p>{{ $chirp->text }}</p>
<p>{{ $chirp->click->ip_address }}</p>
</div>
</div>
@endforeach
在home.blade.php,{{ $chirp->click->ip_address }}
无法检索并得到错误"Facade\Ignition\Exceptions\ViewException Trying to get property 'ip_address' of non-object"
但是,如果我删除它,我可以正确地检索 {{ $chirp->user->name }}
。
为什么我不能从 Chirp 模型中检索 Click 模型,而我可以从 Chirp 模型中检索用户模型?
谢谢。
Chirp 有很多点击(不是点击)。你必须在你的 blade.
中 foreach$chirp->clicks
@foreach ($chirp->clicks as $click)
<p>This is click id {{ $click->id }}</p>
@endforeach
您还需要循环点击:
@foreach($chirps as $chirp)
<div>
<div>by
<b>{{ $chirp->user->name }}</b>
on
<small>{{ $chirp->posted_at }}</small>
</div>
@foreach($chirp->clicks as $click)
<div>
<p>{{ $chirp->text }}</p>
<p>{{ $click->ip_address }}</p>
</div>
@endforeach
</div>
@endforeach
你与Chirp
和clicks
在这里您获得了很多点击而不是点击
@foreach($chirp->clicks as $click)
<p>{{ $click->ip_address }}</p>
@endforeach
要调试此问题,您可以执行以下步骤:
检查chirps变量是否在控制器中有任何数据。
dd($chirps);
- 如果您知道自己拥有数据,则可以采取措施使您的 blade 变得更好。 因为它是多对多的关系,所以你应该遍历数据。
@foreach($chirps as $chirp)
@foreach($chirp->clicks as $click)
<div>
<p>{{ $chirp->text }}</p>
<p>{{ $click->ip_address }}</p>
</div>
@endforeach
@endforeach