Laravel 未显示模型字段
我有一个包含图像、类别id、创建人、更新人、创建地点、更新地点字段的文章表。我将文章翻译存储在一个单独的表中,该表包含slug、title、subtitle、description和locale字段 我想使用seo友好的URL,比如文章/类别slug/文章slug 我在ArticeController中尝试了下面的代码Laravel 未显示模型字段,laravel,laravel-5.6,Laravel,Laravel 5.6,我有一个包含图像、类别id、创建人、更新人、创建地点、更新地点字段的文章表。我将文章翻译存储在一个单独的表中,该表包含slug、title、subtitle、description和locale字段 我想使用seo友好的URL,比如文章/类别slug/文章slug 我在ArticeController中尝试了下面的代码 public function show(ArticleCategory $articlecategory, $slug) { $locale = Lang::local
public function show(ArticleCategory $articlecategory, $slug)
{
$locale = Lang::locale();
$article = Article::join('article_translations', 'articles.id', '=', 'article_translations.article_id')
->where([['slug', $slug], ['locale', $locale]])->with('category')
->firstOrFail();
$article->addPageView();
return ArticleResource::collection($article);
}
老问题(由Chris answer解决):但它不会显示所有字段
我已经根据Chris的建议更新了上面的代码。然而,我也在使用一个资源集合,上面的代码显示了一个错误。
错误
文章资源
<?php
namespace App\Http\Resources\Articles;
use Illuminate\Http\Resources\Json\JsonResource;
use Carbon\Carbon;
use App\Models\ArticleTranslation;
class ArticleResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'article_url' => '/articles/'.$this->category->slug.'/'.$this->slug,
'category' => $this->category->name,
'category_slug' => $this->category->slug,
'category_url' => '/articles/'.$this->category->slug,
'image' => url('/').$this->image,
'author' => $this->creator->name,
'created' => Carbon::parse($this->created_at)->diffForHumans(),
'updated' => Carbon::parse($this->updated_at)->diffForHumans(),
'views' => $this->page_views,
'title' => $this->title,
'subtitle' => $this->subtitle,
'description' => $this->content,
'links' => [
'self' => 'link-value',
],
];
}
}
您在打开查询时仅对id
和slug
进行选择,因此您将始终限于这些字段
尝试:
这是因为您正在覆盖文章
模型上选择的字段。删除select
方法调用。向我展示您的文章
模型?请将您的问题还原为原始问题。你完全改变了问题(包括标题)。如果你有一个新问题,问一个新问题。我是这个论坛的新手。我试一个新问题,没问题。人们只是想帮助你,当你戏剧性地改变你的问题时,这意味着他们付出的努力是徒劳的,sorry@Srikanth,但我拒绝了编辑请求-将其包装在appmake中不是上面代码的意图。你是否需要这样做才能使你的场景生效?是的,这是我的解决方案。
<?php
namespace App\Http\Resources\Articles;
use Illuminate\Http\Resources\Json\JsonResource;
use Carbon\Carbon;
use App\Models\ArticleTranslation;
class ArticleResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'article_url' => '/articles/'.$this->category->slug.'/'.$this->slug,
'category' => $this->category->name,
'category_slug' => $this->category->slug,
'category_url' => '/articles/'.$this->category->slug,
'image' => url('/').$this->image,
'author' => $this->creator->name,
'created' => Carbon::parse($this->created_at)->diffForHumans(),
'updated' => Carbon::parse($this->updated_at)->diffForHumans(),
'views' => $this->page_views,
'title' => $this->title,
'subtitle' => $this->subtitle,
'description' => $this->content,
'links' => [
'self' => 'link-value',
],
];
}
}
$locale = Lang::locale();
$article = Article::join('article_translations', 'articles.id', '=', 'article_translations.article_id')
->where('slug', $slug)->withTranslations($locale)
->firstOrFail();
$article->addPageView();
return $article;