2016-09-01 3 views
0

Я новичок в Laravel. У меня есть два класса (User, Post), и я хочу вызвать класс Post из класса User, используя отношения один к одному, hasOne (пространство имен). Возможно ли это? Это так же, как показано ниже, но код отличается.
https://www.youtube.com/watch?v=Lr28pSlqzV8&list=PLfdtiltiRHWEb-tzSN99Zy-39Y1tKl5DB&index=3
вот мой Пользователь классКак получить доступ к моему классу сообщений с отношениями один к одному в laravel

<?php 

namespace App; 

use Illuminate\Foundation\Auth\User as Authenticatable; 
use App\Post; 

class User extends Authenticatable 
{ 

    protected $fillable = [ 
     'name', 'email', 'password', 
    ]; 

    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 

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

Это routes.php

Route::get('/user/{id}/post',function ($id){ 
    return User::find($id)->post->content; 

}); 

мой Сообщение класс

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 
use Illuminate\Database\Eloquent\SoftDeletes; 

class Post extends Model 
{ 
    use SoftDeletes; 

    protected $dates=['deleted_at']; 
    protected $fillable=[ 
     'title', 
     'content' 
    ];} 

здесь я так называемый методом прибудет с помощью пользователя класса и я хочу, чтобы получить сообщений таблицы колонок контента (который из класса Поста) я хочу знать, как это сделать, потому что я запускаю этот код я получил ошибку at HandleExceptions-> handleError ('8', 'Попытка получить свойство не-объекта', 'C: \ xampp \ htdocs \ cms \ app \ Http \ routes.php', '144', array ('id '=> '1')) в routes.php линии 144 здесь таблицы enter image description here

enter image description here

enter image description here

+0

Если это блог, я бы сделал бы пользователя hasMany сообщений ... не только один. – Sherif

+0

@Sherif Я хочу использовать один к одному hasOne(), как я могу ................? –

ответ

0

Мы должны увидеть сообщение класс, чтобы быть уверенным, но я думаю, что эти таблицы просто пусты. Пользователь не имеет сообщений, поэтому User :: find ($ id) -> post имеет значение null, а затем вы пытаетесь получить его свойство содержимого, что приводит к ошибке, полученной вами, поскольку значение null является буквально не объектом. Просто сгенерируйте образцы данных, чтобы проверить, правда ли это.

Кроме того, возвращающий объект, как это не будет работать:

// this will not work 
return User::find($id)->post->content; 

// do this in the testing phase to see if relationship works 
return print_r(User::find($id)->post->content, true); 
// or 
dd(User::find($id)->post->content); 

В противном случае вы, кажется, на правильном пути, продолжайте идти!

+0

no bro, в обеих таблицах есть данные. Над кодом не работает.same error.i также обновил мой вопрос с post class и error pic.i думаю, что iam не смог получить доступ к ** Post ** классу в функции hasOne. может у плз помочь мне :). –

+0

bro решил :), я добавил еще две записи с одним и тем же user_id, тогда он работает, но теперь также с 1 записью не работает. В любом случае, это работает. –