2016-08-16 4 views
0

project VERSION 5.2Попытка получить собственность не объекта [laravel 5.2]

Я новый ученик Laravel 5. плз решить ...

Эрро г: Попытка получить свойство необъектных

Comment.php [model]

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Comment extends Model 
{ 
    // 
    public function articals() 
    { 
     return $this->belongsTo('App\Artical'); 
    } 

    protected $fillable = array('body','artical_id'); 


} 

Article.php [model]

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Artical extends Model 
{ 
    // 
    public function comments() 
    { 
     return $this->hasMany('App\Comment'); 
    } 

    protected $fillable = array('title','body'); 


} 

route.php [route]

use App\Artical; 
use App\Comment; 

Route::get('/', function() 
{ 

$c = Artical::find(18)->comments; 
    foreach($c as $comment) 
    { 
    print_r($comment->body.'<br />'); 
    } 
}); // working ok.....but 

    $a = Comment::find(18)->articals; 
    print_r($a->title); // error:Trying to get property of non-object 




} 

getting error:Trying to get property of non-object

плз помочь мне ...

article table structure

comment table structure

+0

, что линия это говорит ошибка на? – Derek

+0

И какой файл это говорит вам, что выдает ошибку? – Derek

+0

Это означает, что '$ a' не является объектом, а это значит, что статьи предположительно являются нулевыми. 'Article :: comments()' должно быть 'hasMany (Comment :: class)' и 'Comment :: articles()' должно быть предположительно 'Comment :: article()'.Исправить связь, скорее всего, означает, что статья возвращается для комментария, что означает, что '$ a-> title' будет работать –

ответ

0

Я думаю, что ваши отношения могут быть выключены. Угадай из кода, что отношения много для многих? Если это так, то эти отношения должны принадлежать многим. Также убедитесь, что вы определяете отношения, и они обратные на правильных моделях (в зависимости от того, у кого есть внешний ключ).

https://laravel.com/docs/5.2/eloquent-relationships#defining-relationships

0

Проблема ваша articles() отношения на вашей Comment модели.

Если вы не указали внешний ключ в отношении отношения belongsTo, он строит имя внешнего ключа на основе имени метода отношений. В этом случае, поскольку ваш метод отношений - articles(), он будет искать поле articles_id.

Вам необходимо либо переименовать отношение articles() к article() (что имеет смысл, так как будет только одна статья), или вам нужно указать имя ключа в определении отношений.

class Comment extends Model 
{ 
    // change the relationship name 
    public function article() 
    { 
     return $this->belongsTo('App\Article'); 
    } 

    // or, specify the key name 
    public function articles() 
    { 
     return $this->belongsTo('App\Article', 'article_id'); 
    } 
} 

Заметим, что это отличается от hasOne/hasMany стороне отношений. Он создает имя ключа, основанное на имени класса, поэтому нет необходимости изменять, как определяется отношение comments() на модели Article.

+0

тот же пропущенный чувак –

+0

@ShivBhargav Ваши другие комментарии показывают, что '$ a = Comment :: fint (18); print_r ($ a); 'дает пустой результат. Это означает, что у вас нет комментария с идентификатором '18'. Это также будет проблемой. – patricus

+0

У меня есть 3 комментария с id 18 и 2 комментариями с идентификатором 17, но в обоих одинаковых промах ... –

0

Изменить следующую строку

$a = Comment::find(18)->articles; 

в

$a = Comment::find(18); 
+0

$ a = Комментарий :: fint (18); print_r ($ а); // выход Empty НЕ ЛЮБАЯ ОШИБКА, но $ a = Комментарий :: fint (18) -> a rts; // получение ошибки: попытка получить свойство не-объекта –

+0

Что такое вывод для комментария :: find (18) -> articles; ? –

Смежные вопросы