2016-03-31 15 views
2

ここでのシナリオは:Laravel 5.2 1対1気味の悪い関係

私は2つのテーブルを持っています。

1. User 
2. Post 

ユーザーはサインイン、ログイン、ログアウトできます。ユーザーは自分のプロファイルを作成して更新できます。

ポストテーブルには個々のユーザー情報が含まれています。ユーザーがプロファイルを作成すると、このテーブルにはデータが含まれ、このテーブルからユーザーはデータも更新できます。

問題はユーザーを作成できますが、更新できませんでした。この問題をどうやって解決するのですか?ここで

Undefined property: 
Illuminate\Database\Eloquent\Collection::$first_name (View: 
C:\xampp\htdocs\protfolio\resources\views\update.blade.php) 

は私のユーザーモデルである:ここで

<?php 

namespace App; 

use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 

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


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

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

はポストモデルである:ここ

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Post extends Model 
{ 
    public function user() 
    { 
     return $this->belongsTo('App\User'); //Profile is your profile model 
    } 
} 

はポストコントローラである:ここで

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use Illuminate\Http\Response; 
use App\Http\Requests; 
use App\Post; 
use App\User; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Storage; 
use Illuminate\Support\Facades\File; 

class PostController extends Controller 
{ 


    public function getDashboard() 
    {   
    $posts = Post::all(); 
      return view('dashboard',['posts'=>$posts]); 
    } 


    public function postUpdate(Request $request) 
    { 
     $this->validate($request,[ 
      'first_name'=> 'required|max:120', 
      'middle_name'=> 'required|max:120', 
      'last_name' => 'required|max:120', 
      'gender'=> 'required', 
      'dob'=>'required', 
      'nationality'=>'required', 
      'nid'=>'required', 
      'email' => 'required|email|unique:users', 
      'phone_no'=>'required', 
      'about_me'=>'required', 
      ]); 
     $post = Post::find($request['postId']); 
     if (Auth::user() != $post->user) { 
      return redirect()->back(); 
     } 
     $post->first_name = $request['first_name']; 
     $post->middle_name = $request['middle_name']; 
     $post->last_name = $request['last_name']; 
     $post->gender = $request['gender']; 
     $post->dob = $request['dob']; 
     $post->nationality = $request['nationality']; 
     $post->nid = $request['nid']; 
     $post->email = $request['email']; 
     $post->phone_no = $request['phone_no']; 
     $post->about_me = $request['about_me']; 
     $post->update(); 
     return redirect()->route('dashboard');   
    } 

    public function postCreate(Request $request){ 
    $this->validate($request,[ 
     'first_name'=> 'required|max:120', 
     'middle_name'=> 'required|max:120', 
     'last_name' => 'required|max:120', 
     'gender'=> 'required', 
     'dob'=>'required', 
     'nationality'=>'required', 
     'nid'=>'required', 
     'email' => 'required|email|unique:users', 
     'phone_no'=>'required', 
     'about_me'=>'required', 
     ]); 

    $post = new Post(); 
     $post->first_name = $request['first_name']; 
     $post->middle_name = $request['middle_name']; 
     $post->last_name = $request['last_name']; 
     $post->gender = $request['gender']; 
     $post->dob = $request['dob']; 
     $post->nationality = $request['nationality']; 
     $post->nid = $request['nid']; 
     $post->email = $request['email']; 
     $post->phone_no = $request['phone_no']; 
     $post->about_me = $request['about_me'];   
     $message='There was an Error'; 
     if($request->user()->post()->save($post)){ 
      $message = "Profile Created successfully"; 
     } 
     return redirect()->route('dashboard')->with(['message' => $message]); 

    } 
} 

はユーザーでありますコントローラ:

0ここで
<?php 

namespace App\Http\Controllers; 
use Illuminate\Http\Request; 
use App\Http\Requests; 
use App\User; 
use App\Post; 
use Illuminate\Support\Facades\File; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Storage; 

class UserController extends Controller 
{ 

    public function getAccount() 
    { 

    $posts = Post::all(); 
     return view('update',['user'=>Auth::user()],['posts'=>$posts]); 
    } 

    public function getCreate() 
     {   
     return view('create',['user'=>Auth::user()]); 
     } 
} 

私update.blade.phpが

@extends('layouts.master') 

    @section('content') 
     @include('includes.message-block') 
     <div class="container" > 
       <h3> Create course </h3> 
      {!! Form::open(array('route' => 'update','class'=>'form-horizontal','method'=>'POST')) !!} 
      {!! Form::token(); !!} 
      {!! csrf_field() ; !!} 
       <div class="form-group"> 
        <label>First Name</label> 
        <input type="text" name="first_name" class="form-control" value="{{$posts->first_name}}"> 
       </div> 
       <div class="form-group"> 
        <label>Middle Name</label> 
        <input type="text" name="middle_name" class="form-control" value="{{$posts->middle_name}}"> 
       </div> 
       <div class="form-group"> 
        <label>Last Name</label> 
        <input type="text" name="last_name" class="form-control" value="{{$posts->last_name}}"> 
       </div> 

       <div class="form-group"> 
        <label>Gender</label> 
        <select class="form-control" name="gender" value="{{$posts->gender}}"> 
         <option>Male</option> 
         <option>Female</option>  
        </select> 
       </div> 
       <div class="form-group"> 
        <label> Date Of Birth</label> 
        <input type="date" name="dob" class="form-control" value="{{$posts->dob}}"> 
       </div> 

       <div class="form-group"> 
        <label>Nationality</label> 
        <input type="text" name="nationality" class="form-control" value="{{$posts->nationality}}"> 
       </div> 

       <div class="form-group"> 
        <label>NID</label> 
        <input type="text" name="nid" class="form-control" value="{{$posts->nid}}"> 
       </div> 

       <div class="form-group"> 
        <label>Email</label> 
        <input type="email" name="email" class="form-control" value="{{$posts->email}}"> 
       </div> 

       <div class="form-group"> 
        <label>Phone</label> 
        <input type="text" name="phone_no" class="form-control" value="{{$posts->phone_no}}"> 
       </div> 

       <div class="form-group"> 
        <label>About Me</label> 
        <textarea class="form-control" name="about_me" rows="3">"{{$posts->about_me}}"</textarea> 
       </div> 


       <button type="submit" class="btn btn-default">Submit</button> 
      {!! Form::close() !!} 
      </div> 

    @endsection 

答えて

1

$posts->first()->first_nameをし、更新ページ

0

ある問題は、Userモデルクラス定義であると思われる、ここに次のコードを試してみてください:

ユーザーモデル

namespace App; 

use Illuminate\Auth\Authenticatable; 
use Illuminate\Database\Eloquent\Model; 

class User extends Model 
{ 
    use Authenticatable; 
    ... 
0

あなたの問題はここにあります:

public function getAccount() 
{ 

$posts = Post::all(); 
    return view('update',['user'=>Auth::user()],['posts'=>$posts]); 
} 

Post :: all()は、自分のテーブルにあるすべての投稿を取得し、ユーザーに属するものは取得しません。 (私はこれがあなたが望むものだと仮定します)。

$posts = Auth::user()->post 
+0

いや、まだ同じ問題で他のすべての変数に同じ使用:

は現在ログインしているユーザーに関連付けられているポストを得るために、あなたはこれを試すことができます! – Hola

+0

あなたはあなたのビューでvar_dump($ posts)を取得して、あなたが得た特性を見ることができますか? – RDev