2016-03-31 13 views
2

Hier ist Szenario:Laravel 5.2 One to One eloquente Beziehung

Ich habe 2 Tabellen.

1. User 
2. Post 

Benutzer kann sich anmelden, einloggen und abmelden, er kann sein eigenes Profil erstellen, er kann es aktualisieren.

Post-Tabelle enthält individuelle Benutzerinformationen, wenn Benutzer sein Profil erstellen, enthält diese Tabelle die Daten und aus dieser Tabelle kann der Benutzer die Daten auch aktualisieren.

Das Problem ist, ich die Benutzer erstellen können, aber konnte es nicht aktualisieren. Wie löse ich dieses Problem?

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

Hier ist mein User-Modell:

<?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'); 
    } 
} 

Hier ist die Post Model:

<?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 
    } 
} 

hier ist die Post-Controller:

<?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]); 

    } 
} 

ist hier der Nutzer Controller:

<?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()]); 
     } 
} 

Hier ist meine 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 

Antwort

1

$posts->first()->first_name und in allen anderen Variablen in Update-Seite

0

Das Problem mit dem Benutzermodell Class Definition zu sein scheint, hier den folgenden Code Bitte versuchen:

Benutzermodell

0

Ich denke, Ihr Problem ist hier:

public function getAccount() 
{ 

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

Der Post :: all() ruft alle Beiträge aus Ihrer Tabelle ab, nicht die, die dem Benutzer gehört. (Ich nehme an, dass dies das ist, was Sie wollen).

die Post mit dem aktuellen protokollierten Benutzer zugeordnet zu bekommen, können Sie dies versuchen:

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

Nein, immer noch das gleiche Problem gleiche verwenden! – Hola

+0

Können Sie var_dump ($ posts) in Ihrer Sicht und sehen, welche Eigenschaften Sie bekommen? – RDev