I have this code in my model called Tag:
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Tag extends Model
{
protected $fillable = [
'tag'
];
public function articles(){
return $this->belongsToMany(Article::class);
}
}
and I use this code in my controller
public function fillter($target){
$tags = tag::where('id', 3)->count();
$article = $tags->articles;
foreach ($article as $article){
return $article->title;
}
}
when I run the code, I get an exception: Property [articles] does not exist on this collection instance.
but if I am able to run the following code:
$tags = tag::where('id', 3)->first();
Advertisement
Answer
You are practically trying to get articles from integer value, since that is what count() function returns. This line of code returns an integer:
$tags = tag::where('id', 3)->count(); // For ex: 3
And you are trying to do this in the next line of code:
$article = 3->articles; //Which doesn't exist
By using this line of code here:
$tags = tag::where('id', 3)->first();
You are returning a Tag instance, which in fact has the articles property.
Also, your foreach code won’t work because of two reasons:
First: You can’t use same variable in your foreach loop, it should be like this:
foreach($articles as $article)
Second: It will stop executing after the first loop, since you have a return statement:
foreach ($articles as $article){
return $article->title;
}
It would be better to pass the $articles variable to your view, and do a foreach loop there.