2016-09-06 12 views
0

私は単に私の場合、すべての画像がproject. project.id = images.model_keyにリンクされたサブループを持つループを作成したいと考えています。モデルから関連データを取得するにはどうすればよいですか?

私はうまくいきませんでした。

function index() 
    { 
    $projects = Project::all(); 
    foreach($projects as $project) 
     { 
     echo "<pre>"; 
     print_r($project->images); 
     echo "</pre>"; 
     } 
    } 

私はプロジェクトモデルです。

<?php 
namespace App; 

use Illuminate\Database\Eloquent\Model; 
use App\ProjectCategoryProject; 
use App\Models\Image; 

class Project extends Model 

{ 

    public $fillable = ['id', 'title','description', 'home_page', 'display']; 

    public function categories() 
    { 
     return $this->hasMany('App\ProjectCategoryProject'); 
    } 


    public function images() 
    { 
     return $this->hasMany('App\Models\Image'); 
    } 

... 

は、だから、私はモデルproject.id = images.model_keyが、どのように指定する必要が推測しますか?

エラー:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'images.project_id' in 'where clause' (SQL: select * from `images` where `images`.`project_id` = 4 and `images`.`project_id` is not null) 
Thanks, sorry i'm guetting confused. 
+0

このエラーはあなたが必要とするすべてを示しています。あなたは 'images'テーブルに' project_id'カラムを持っていますか? –

+0

いいえ私はproject_idと等しいmodel_key列を持っていません。 – CREAZPRO

+0

@CREAZPROこれは同じですが、画像テーブルにproject_idという名前を付ける必要があります –

答えて

0

デフォルトLaravelすることにより、現在のモデルから列名を推測しようとすると、それがPROJECT_IDする他のモデルでは、IDSだモデル事業では、列を推定します。ただし、これをオーバーライドして、関係に使用する列を明示的に指定することができます。

public function images() 
{ 
    // specify a foreign key to use 
    return $this->hasMany('App\Models\Image', 'model_key'); 
} 

これは完全に明示的にする場合はこれです。

public function images() 
{ 
    // specify a foreign key to use 
    return $this->hasMany('App\Models\Image', 'model_key', 'id'); 
} 

ただし、読みやすさとメンテナンス性を向上させるため、laravelの "convention"を遵守することを強くお勧めします。可能であれば、列の名前を変更するだけです:)。

関連する問題