【问题标题】:Laravel findOrFail returns all recordsLaravel findOrFail 返回所有记录
【发布时间】:2016-01-19 23:57:55
【问题描述】:

不知道为什么会这样。我以前用过这个方法,一切都很好。由于某种原因 findOrFail 没有将 where 子句添加到要执行的查询中。还有其他人遇到这个吗?我可以只使用 Model::where() 但如果有问题或遗漏了什么,我想找出问题所在。

路线:

Route::get('/forums/topic/{id}/post/create', 'ForumController@topicPostCreate');

控制器:

<?php

namespace App\Http\Controllers;


use Illuminate\Http\Request;

use Image;
use App\PostImage;
use Auth;
use App\Topic;
use App\Post;
use App\Http\Requests\SearchRequest;
use App\Http\Requests\PostImageRequest;
use App\Http\Requests\PostRequest;
use App\Http\Requests\TopicRequest;
use App\Http\Controllers\Controller;


class ForumController extends Controller
{

    public function __construct()
    {
        $this->middleware('auth');
    }


    /**
     * Show the form for creating a new topic.
     *
     * @return \Illuminate\Http\Response
     */
    public function topicPostCreate($id)
    {
        $results = Topic::findOrFail($id)->toSql();
        dd($results);

    }

}

型号:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Topic extends Model
{
    protected $fillable = [
        'title',
        'user_id'
    ];

    /**
     * Many topics belong to one user
     */
    public function user(){

        return $this->belongsTo('App\User');

    }

    /**
     * Each Topic has many posts
     * 
     */
    public function posts()
    {
        return $this->hasMany('App\Post');
    }

}

dd()函数返回的查询如下:

"select * from `topics`"

有人知道为什么会这样吗?一定有充分的理由。我可能错过了一些东西......???

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    findOrFail 返回一个新的、填充的 Topic-instance 和一个空白查询。这就是为什么您看不到任何 where 的原因,因为其中包含的查询已经执行。

    如果您想查看正在运行的实际查询,您可以尝试收听数据库查询(只需将其暂时放入routes.php

    \DB::listen(function($sql) {
        dump($sql);
    });
    

    【讨论】:

    猜你喜欢
    • 2021-12-04
    • 2019-12-27
    • 2015-11-05
    • 2019-01-19
    • 2021-12-20
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    相关资源
    最近更新 更多