2014-06-18 2 views
0

임 파일 테이블의 URL 등록 정보에 $post->file->url으로 액세스하려고 시도했으나 "비 객체의 속성을 가져 오려고 시도 중" 오류가 발생합니다. 모델명으로 File을 사용할 수 없기 때문에 테이블과 모델이 다릅니다. 뭔가 빠져 있니? 누군가가 해결책을 찾길 바랍니다.Laravel 4.2 사용자 정의 테이블 이름과의 관계가

- posts: 
[PK] id 
     title 
[FK] featured_image 

- files: 
[PK] id     
     title 
     url 

내 모델 : 사전에

class TheFile extends \Eloquent 
{ 
    protected $table = 'files'; 

    public function post() { 
    return $this->belongsTo('Post'); 
    } 
} 


class Post extends \Eloquent 
{ 
    protected $table = 'posts'; 

    public function file() { 
    return $this->hasOne('TheFile', 'id', 'featured_image'); 
    } 
} 

덕분에 여기 내 테이블입니다.

답변

2

내 테이블 이름을 medias로, 내 모델을 Media로 변경했습니다. 그런 다음이 코드를 Post 모델에 넣으십시오. 그것은 작동합니다. 테이블, 모델 및 메소드의 이름은 유사해야합니다.

public function media() { 
    return $this->belongsTo('Media', 'featured_image', 'id'); 
} 
2

아마도 내가 틀렸지 만 내가 보았을 때, 당신은 실제로이 주변에서 잘못된 방식으로 관계가 있습니다. 테이블 X에 테이블이 하나있는 경우 Y이면 FK 필드는 Y이고 X의 PK와 관련됩니다. 그러나 당신은 그것을 다른 방향으로 가지고 있습니다.

같은 당신이해야 할 두 가지 중 하나를

  1. 변경이 아니라 당신의 관계를 변경 posts

  2. featured_image (file`.`id로 점)하는 것보다 filespost_id을 넣어 데이터베이스 데이터베이스 구조와 일치 :

    class TheFile extends \Eloquent 
    { 
        protected $table = 'files'; 
    
        public function post() { 
         return $this->hasOne('Post'); 
        } 
    } 
    
    
    class Post extends \Eloquent 
    { 
        protected $table = 'posts'; 
    
        public function file() { 
         return $this->belongsTo('TheFile'); 
        } 
    } 
    

    테이블 변경을 원하지 않으면 다양한 필드를 변경해야합니다.


엄지의 기본 규칙은 테이블의 FK가있는 경우는 테이블 '에 속한'라는 것이다. 다른 테이블은 '가지고있다'또는 '많다'중 하나입니다. 이 규칙에 대한 약간의 예외는 테이블이 FK가없는 다른 테이블과 관련 될 수있는 명백하게 '속한 것'입니다. 그러나 동일한 규칙의 특수화 된 버전 인 X '은'X_Ys '이 많고 Y' X_YsX_YX에 속하고 X_YY에 속합니다. 정말 통사론적인 설탕이에요.

+0

나는 귀하의 대답이 옳다고 생각합니다. 나는'belongsTo()'를'Post'에 넣었고'hasMany()'를'TheFile'에 넣었습니다. 그러나 여전히 작동하지 않습니다. 테이블과 모델 이름이 일치하지 않기 때문일 수 있습니다. –