如何调用静态和Scoope函数? LARAVEL

时间:2016-08-23 00:52:55

标签: function laravel search scope

如何在一个功能控制器中调用两个模型函数? 我是Laravel世界的新手,我试图创建一个Search按钮,我在Model.php中有这两个函数:

public static function Peticion(){
 return DB::table('usados')
    ->join('marcas', 'marcas.id', '=', 'usados.marca_id')
    ->select('usados.*', 'marcas.nombre')
    ->orderBy('created_at', 'desc')
    ->paginate(4);
}

public function scopeSearch($query,$buscar){
return $query->where('modelo', 'LIKE', "%$buscar%");
}

这是我的controller.php:

public function usados(Request $request) { 
 $usado = Usados::Peticion();
 Usados::Search($request->buscar)->paginate(12);
 return view('usados', compact('usado'));
}

我的数据库结构:

Table Usados /// Table Marcas

两者都很完美但是当一个人工作时另一个人没有工作,而且我不知道如何让他们在同一个控制器中一起工作?

我有功能" Peticion"从DB列出一些信息,另一个是搜索按钮..

3 个答案:

答案 0 :(得分:0)

假设您的模型名称是model1

然后像这样从控制器中调用它

$obj=new model1();
$usado=$obj->Peticion();

<强>被修改

我的桌子叫&#34;客户&#34; customers table

在名为 TestController

的控制器中
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;


use App\Http\Requests;
use App\TestModel;

class TestController extends Controller
{
    //

    public function usados(){

        $obj=new TestModel();
        $usado=$obj->Peticion();
        var_dump($usado);
        $datavar='s';
        echo "search demo here";

        $search=$obj->scopeSearch($datavar);
        var_dump($search);

    }
}

在名为 TestModel

的模型中
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;


class TestModel extends Model
{
    //
    public static function Peticion(){
        return \DB::table("customers")->select("customers.*")->where("id","<=",11)->get();


    }

    public function scopeSearch($buscar){
     return \DB::table("customers")->select("customers.*")->where('first_name', 'LIKE', "%$buscar%")->get();

    }
}
vardump之后

enter image description here

<强>说明: 我只是使用了c ++对象概念。 假设你的路线是

Route::post('/demo','TestController@usados');

所以它将进入TestController的usados功能

$obj=new TestModel();

这一行将创建一个 TestModel 对象,称为$ obj n在内存中取地址; $ usado = $ obj-&GT; Peticion();

这里Peticion();是函数。$ obj-&gt; Peticion();通过这一行你称之为 TestModel 类的函数Peticion。 然后它将转到类 TestModel 函数,称为Peticion,它将返回你的查询.n回到控制器$ usado = $ obj-&gt; Peticion(); $ usado将查询数据。 var_dump($ usado)之后;你可以看到你的数据。 类似$ search = $ obj-&gt; scopeSearch($ datavar); 然后你可以把它发送到你的视图

return view('viewname',compact('usado','search');
希望你明白。

答案 1 :(得分:0)

当你在模型中声明范围时,静态方法调用的名称从小写开始,如下所示:

Usados::search($request->buscar)->paginate(12);

答案 2 :(得分:0)

两者都应该有效,您必须尝试将数据发送到您的视图:

public function usados(Request $request) { 
 $usado = Usados::Peticion();
 $search =  Usados::search($request->buscar)->paginate(12);//note s in lower case in search
 return view('usados', compact('usado','search'));
}

您应该记录并调试:

使用: \ Log :: info(print_r($ usado,true)); //记录数组