2017-03-04 22 views
2

Urlsビューでカテゴリ名をエコーする方法はありますか?私は、クエリは、このビュー内でhasOneプロパティを取得する方法は?

SELECT * FROM categories WHERE categories.id = 1 

のURLテーブル

id | url | category_id 
1 www.asdf.com 1 

Categoriesテーブル

id | category 
1 Something 
のようなものであるべきと考えてい

Column not found: 1054 Unknown column 'categories.url_id' in 'where clause' 
(SQL: select * from `categories` where `categories`.`url_id` = 23 and `categories`.`url_id` is not null limit 1 

:私はこのエラーを取得します

テーブル

public function up() 
{ 
    Schema::table('urls', function(Blueprint $table){ 
     $table->integer('category_id')->unsigned()->nullable(); 
     $table->foreign('category_id')->references('id')->on('urls'); 
    }); 
} 

をURLへの列CATEGORY_IDを追加するための移行(HM私はこの問題を解決する必要があるとreferences('id')->on('categories')を置くと信じて)

のURLモデル

class Url extends Model 
{ 

    protected $table = 'urls'; 

    public function category() 
    { 
     return $this->hasOne('App\Category'); 
    } 

} 

URL索引コントローラ

$urls = URL::paginate(100) 
return view('urls.index')->with('urls', $urls); 

Urls.indexビュー

{{ $url->category->category }} 

私はこの

public function category() 
{ 
    return $this->belongsTo('App\Category'); 
} 

のURLモデルを変更し、私はvar_dump($url->category)を行うときに、正しいSQLクエリが発生した場合:

select * from `categories` where `categories`.`id` = '1' limit 1 

が、エラーがTrying to get property of non-object

答えて

1

使用belongsTo()関係の代わりに、hasOne()あるので、私はまだ{{ $url->category->category }}

でカラム名を取得することはできません。

public function category() 
{ 
    return $this->belongsTo('App\Category'); 
} 
+0

私が書いたように私がしたが、私は見出しました何が問題だったのですか?category_idのURLにNULL値がありました。これは動作します @if($ url-> category_id) {{$ url-> category-> category}} @endif –

関連する問題