传递链函数作为参数作为 php 中的参数
Pass chain function as paramter as parameter in php
我有一个功能。它具有需要执行的方法链接。
public function someFunction()
{
$query=$this->model;
$query->select($columns)
->skip($request->get('start') * $request->get('length'))
->take($request->get('length'))
->orderBy(
$request->get('sort_column'),
$request->get('sort_direction')
)
->get();
//Some other task
}
它工作正常,但我需要对该函数稍作修改,我想要的是我想在该函数中传递一个连接以进行方法链接。
public function someFunction($join_as_parameter)
{
$query=$this->model;
$query->select($columns)
//Join should be executed here as a parameter in method chaning .
->skip($request->get('start') * $request->get('length'))
->take($request->get('length'))
->orderBy(
$request->get('sort_column'),
$request->get('sort_direction')
)
->get();
//Some other task
}
所以最终的函数执行会像这样
public function someFunction($join_as_parameter)
{
$query=$this->model;
$query->select($columns)
->join('table','sometable.id', '=', 'other_table')
->skip($request->get('start') * $request->get('length'))
->take($request->get('length'))
->orderBy(
$request->get('sort_column'),
$request->get('sort_direction')
)
->get();
//Some other task
}
有什么办法吗?任何帮助,将不胜感激。谢谢
这样你就可以实现你所需要的。
use DB;
use Closure;
use Illuminate\Database\Query\JoinClause;
public function someFunction(Closure $join_clauser)
{
//create Query Builder object
$query = DB::query();
//Add the `$join` object to the table joins for this query
$join_as_parameter = call_user_func($join_closure, $query);
$query->joins = array_merge((array) $query->joins, [$join_as_parameter]);
$query->select($columns)
->skip($request->get('start') * $request->get('length'))
->take($request->get('length'))
->orderBy(
$request->get('sort_column'),
$request->get('sort_direction')
)
->get();
//Some other task
}
//create Query Builder object
$query = DB::query();
并执行函数,
someFunction(function($query){
// return JoinClause object with joining conditions
return (new JoinClause($query, 'inner', 'table'))
->on('table.id', '=', 'othe_table.table_id');
});
此外,您可以修改它以传递 joins
数组以添加多个 joins
您的查询。
要将其用于 eloquent 型号,请替换
$query = DB::query();
和
$query = Model::query()->getQuery();
注意 : ->getQuery()
用于检索 Query\Builder
对象,因为 JoinClause
期望它作为第一个参数。
我有一个功能。它具有需要执行的方法链接。
public function someFunction()
{
$query=$this->model;
$query->select($columns)
->skip($request->get('start') * $request->get('length'))
->take($request->get('length'))
->orderBy(
$request->get('sort_column'),
$request->get('sort_direction')
)
->get();
//Some other task
}
它工作正常,但我需要对该函数稍作修改,我想要的是我想在该函数中传递一个连接以进行方法链接。
public function someFunction($join_as_parameter)
{
$query=$this->model;
$query->select($columns)
//Join should be executed here as a parameter in method chaning .
->skip($request->get('start') * $request->get('length'))
->take($request->get('length'))
->orderBy(
$request->get('sort_column'),
$request->get('sort_direction')
)
->get();
//Some other task
}
所以最终的函数执行会像这样
public function someFunction($join_as_parameter)
{
$query=$this->model;
$query->select($columns)
->join('table','sometable.id', '=', 'other_table')
->skip($request->get('start') * $request->get('length'))
->take($request->get('length'))
->orderBy(
$request->get('sort_column'),
$request->get('sort_direction')
)
->get();
//Some other task
}
有什么办法吗?任何帮助,将不胜感激。谢谢
这样你就可以实现你所需要的。
use DB;
use Closure;
use Illuminate\Database\Query\JoinClause;
public function someFunction(Closure $join_clauser)
{
//create Query Builder object
$query = DB::query();
//Add the `$join` object to the table joins for this query
$join_as_parameter = call_user_func($join_closure, $query);
$query->joins = array_merge((array) $query->joins, [$join_as_parameter]);
$query->select($columns)
->skip($request->get('start') * $request->get('length'))
->take($request->get('length'))
->orderBy(
$request->get('sort_column'),
$request->get('sort_direction')
)
->get();
//Some other task
}
//create Query Builder object
$query = DB::query();
并执行函数,
someFunction(function($query){
// return JoinClause object with joining conditions
return (new JoinClause($query, 'inner', 'table'))
->on('table.id', '=', 'othe_table.table_id');
});
此外,您可以修改它以传递 joins
数组以添加多个 joins
您的查询。
要将其用于 eloquent 型号,请替换
$query = DB::query();
和
$query = Model::query()->getQuery();
注意 : ->getQuery()
用于检索 Query\Builder
对象,因为 JoinClause
期望它作为第一个参数。