我是laravel的新手,我遇到了一些麻烦。我尝试获取存储在两个不同表中的数据并显示它们:
News.php(模特)
col0 col1 col2 col4
1 '1ZE7999' 865545 20 20
5 100 865628 292 5
3 34 865665 296 0
4 56 865700 297 0
2 'R022428' 865584 297 0
这就是我从新闻表中获取结构为:
的所有数据的方法 public static function Data($category) {
$perPage = config('var.news.perPage');
if ($category) {
$news = News::orderBy('id', 'desc')->where('category', $category)->SimplePaginate($perPage);
} else {
$news = News::orderBy('id', 'desc')->SimplePaginate($perPage);
}
return $news;
}
类别列包含以逗号分隔的值,例如1,2,3,4-
现在,我有另一张表,News_Cat,其中包含id, title, body, created_at updated_at, created_by, updated_by, category
列。
在另一种方法中,我尝试根据存储在新闻表
的类别列中的值来获取过滤器名称id, name
然而,它完全不起作用。我试图实现的是在view.blade中显示过滤器名称为' name'来自News_Cat的指定过滤器的值
public static function getFilterNames($id) {
$filters = DB::table('News_Cat')
->select('News_Cat.name as name')
->leftJoin('News', DB::raw('CAST(News_Cat.id as nvarchar)'), DB::raw('ANY(SELECT(News.category))'))
->where('News.id', $id)
->get();
return $filters;
}
因此,我会得到例如 @if($news->count())
@foreach($news as $article)
<a href="{{ route('news.show', $article->id) }}" class="item angled-bg" data-filters="{{ $filters }}">
<div class="row">
代替data-filters =&#34; 1,2,3,4&#34;&gt;
谢谢
答案 0 :(得分:0)
你应该用eloquent!
在您的新闻模型中
public function getFiltersAttribute(){
$categories = explode(',', $this->category);
return implode(', ', NewsCat::find($categories)->pluck('name')->toArray());
}
然后在你看来:
{{ $article->filters }}
将输出news, update, hot, latest
<强> BUT 强>
您应该在类别和新闻之间使用数据透视表,这样会更容易。 此方法不允许您急切加载关系并为每个新闻发出请求
如果您无法更改数据库结构,我建议您:
在AppServiceProvider的启动方法中:
Config::set('tags', NewsCat::all());
THEN
public function getFiltersAttribute(){
$categories = explode(',' $this->category);
return implode(', ', config('tags')->whereIn('id', $categories)->pluck('name')->toArray());
}
许多方法
我正在使用laravel命名约定:
news,categories_news(数据透视)和类别
您将拥有2个模型:新模型和类别
在新模型中
public function categories(){
return $this->belongsToMany(Category::class)
}
在您的类别模型中:
public function news(){
return $this->belongsToMany(New::class);
}
如果您没有使用laravel命名约定,则必须按照以下方式自定义这些ral tion:https://laravel.com/docs/5.5/eloquent-relationships#many-to-many