【发布时间】:2021-09-11 22:24:21
【问题描述】:
我正在尝试从表中调用一个变量,但我收到一个错误“未定义的变量 $user”。我正在尝试让程序从表中显示用户的用户名。
我正在使用 2 个表,部落代表一个群体,一个用户代表......好吧......用户。 所以我试图通过显示某个“部落”的创建者来连接两者。
用户控制器:
<?php
namespace App\Http\Controllers;
Use App\Models\User;
use Illuminate\Http\Request;
class tribesController extends Controller
{
public function index($user)
{
$user = User::findOrFail($user);
return view('home',[
'user'=>$user,
]);
}
}
主页:
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Dashboard') }}</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
{{ $user->username }}
</div>
</div>
</div>
</div>
</div>
@endsection
路由器:
<?php
use Illuminate\Support\Facades\Route;
/*
Route::get('/', function () {
return view('welcome');
});
Route::get('/home', function () {
return view('home');
});
Route::get('/playlist', function () {
return view('playlist');
});
Route::get('/tribe', function () {
return view('tribe');
});
Route::get('/edit', function () {
return view('edit');
});
Auth::routes();
Route::get('/tribe/{user}', [App\Http\Controllers\TribesController::class, 'index'])->name('tribe.index');
数据库文件:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTribesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tribes', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->string('title');
$table->string('genre');
$table->string('filepath')->nullable();
$table->timestamps();
$table->index('user_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tribes');
}
}
型号:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class tribe extends Model
{
public function user(){
return $this->belongsTo(User::class);
}
use HasFactory;
}
【问题讨论】:
-
在你的控制器中,如果你在findOrFail语句之后
dd($user),你会得到什么?如果null,则没有用户返回,这就是失败的原因。 -
我在路由器中添加了这个:Route::get('/user', function () { dd($user); });然后运行:127.0.0.1:8000/user 同样的错误,但如果我运行 Route::get('/user', function () { return dd(Auth::user()->tribe->title); });
-
我的意思是在
$user = User::findOrFail($user);行之后在您的控制器中运行它。这将准确地向您展示代码当时正在做什么。否则,我们倾向于假设查询当然会返回我们期望的结果。故障排除时始终尝试输出变量以查看其中存储的确切内容。 -
我是这样运行的,它列出了有关用户的所有信息,如果我通过用户不存在的 id 执行此操作,它会返回 null,我认为应该这样做..
-
实际上自己解决了,并没有真正解决,只是使用了错误的路径..实际上不明白它是如何工作的。无论如何谢谢你的帮助:)
标签: php laravel model-view-controller