![](/img/trans.png)
[英]Is there a way to select columns using eloquent one to many relationship in laravel 5.2?
[英]Laravel 5.2 One to One Eloquent relationship
這里的場景是:
我有2張桌子。
1. User
2. Post
用戶可以登錄、登錄和注銷,他可以創建自己的個人資料,他可以更新它。
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]);
}
}
這是用戶控制器:
<?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
$posts->first()->first_name
並在更新頁面中的所有其他變量中使用相同的
問題似乎與用戶模型類定義有關,請在此處嘗試以下代碼:
用戶模型
namespace App;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use Authenticatable;
...
我認為你的問題在這里:
public function getAccount()
{
$posts = Post::all();
return view('update',['user'=>Auth::user()],['posts'=>$posts]);
}
Post::all() 從您的表中獲取所有帖子,而不是屬於用戶的帖子。 (我假設這就是你想要的)。
要獲取與當前登錄用戶關聯的帖子,您可以嘗試以下操作:
$posts = Auth::user()->post
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.