在非对象上调用成员函数 where() Laravel 4.2

Call to a member function where() on a non-object Laravel 4.2

我正在尝试使用 id 传递给 URL 来编辑查询,但是当尝试 运行 代码时,我得到一个错误:

Call to a member function where() on a non-object

控制器

class HomeController extends BaseController {

    public function showWelcome() {
        $id = intval($_GET['wab_id']);
        $results = DB::Table('films')->get()->where('wab_id','=', $id);
        print_r($results);
        while ($row=mysql_fetch_array($results)) {       
            $url = $row['url'];

        } 
         return View::make('hello')->with('row', $url);
    }

}

我也试过:

class HomeController extends BaseController {

    public function showWelcome() {
        $id = intval($_GET['wab_id']);
        $results = DB::Table('films')->get()->where('wab_id', $id);
        print_r($results);
        while ($row=mysql_fetch_array($results)) {       
            $url = $row['url'];

        } 
         return View::make('hello')->with('row', $url);
    }

}

只会抛出相同的错误消息,这是唯一没有抛出错误但 returns 错误为:

的片段

mysql_fetch_array() expects parameter 1 to be resource, object given

class HomeController extends BaseController {

    public function showWelcome() {
        $id = intval($_GET['wab_id']);
        $results = DB::Table("SELECT * FROM next WHERE wab_id=$id");
        while ($row=mysql_fetch_array($results)) {       
            $url = $row['url'];

        } 
         return View::make('hello')->with('row', $url);
    }

}

路线

Route::get('/', array(
    'as' => 'home',
    'uses' => 'HomeController@showWelcome'
    ));

您需要更改链接的顺序以将 where() 函数放在 get() 函数之前。 get() 之后的任何内容都将应用于集合而不是查询生成器。

如果你想通过URL传递参数试试:

// routes.php
Route::get('/{wab_id}', array(
    'as' => 'home',
    'uses' => 'HomeController@showWelcome'
));

此外,where() 约束应该在 get() 方法之前。

现在您应该能够接受 URL 参数作为您的 HomeController#ShowWelcome 函数的参数

class HomeController extends BaseController {

    public function showWelcome($wab_id) {
        $id = $wab_id;

        // where() constraint before the `get()` method.
        $results = DB::Table('films')->where('wab_id','=', $id)->get();
        print_r($results);
        while ($row=mysql_fetch_array($results)) {       
            $url = $row['url'];

        } 
         return View::make('hello')->with('row', $url);
    }

}

我试图将一个 std Obj 数组传递给视图,但我必须设置 wab_id,因为如果不设置,我接下来会得到 wab_id 的未定义索引 $arrays = json_decode(json_encode($results), true); 为了将我使用查询得到的 std 数组获取到一个多数组中,然后遍历该数组并且有效

感谢大家的帮助。

控制器

class HomeController extends BaseController {

        public function showWelcome(){
            $id = isset($_GET['wab_id'])?$_GET['wab_id']:"";

            $results = DB::Table('films')->where('wab_id', $id)->get();

            $arrays = json_decode(json_encode($results), true);

            foreach ( $arrays as $film ) {

          }
            return View::make('hello')->with('film', $film);

        }

    }

您收到 mysql_fetch_array 错误,因为当您弄乱 get() 和 where() 函数的顺序时

    //you did it like this 
    DB::table('films')->get()->where('wab_id','=', $id);
    //you did it like this, instead of
    DB::table('films')->where('wab_id','=', $id)->get();

get() 被忽略。这就是为什么结果不会是数组的原因;

编辑:

如果您使用 toArray() 辅助函数,则不需要将其编码和解码为 Json。

    //you can do so like this
    DB::Table('films')->where('wab_id','=', $id)->toArray();
    //or this if thats too long
    $result = DB::table('films')->where('wab_id','=', $id);
    $array = $result->toArray();