在我的应用程序中,我有一些模型与每个模型有一些关系。 我的问题是我必须得到所有相关数据,所以我使用的是querybuilder,我不知道从哪里开始。
如果有人知道并想帮助我,这些是我的模型和关系。(我将解释我想要的数据)。
Fabricacion:(产物)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Fabricacion extends Model
{
protected $table = "fabricacion";
protected $primaryKey = "id_fabricacion";
protected $fillable = ["id_order", "id_megacart", "reference", "name", "width", "height", "length", "date_update", "id_categoria", "id_ubicacion", "id_incidencia", "estado"];
public $timestamps = true;
public function incidencia() {
return $this->belongsTo("App\Models\Incidencia", "id_incidencia", "id_incidencia");
}
public function categoria() {
return $this->belongsTo("App\Models\Categoria", "id_categoria", "id_categoria");
}
public function ubicacion() {
return $this->belongsTo("App\Models\Ubicacion", "id_ubicacion", "id_ubicacion");
}
public function medidas() {
return $this->belongsToMany("App\Models\Medida", "fabricacion_medidas", "id_fabricacion", "id_medida")->withPivot("medida");
}
public function atributos() {
return $this->belongsToMany("App\Models\Atributo", "fabricacion_atributos", "id_fabricacion", "id_atributo")->withPivot("atributo");
}
}
分类:(类别)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Categoria extends Model
{
protected $table = "categorias";
protected $primaryKey = "id_categoria";
protected $fillable = ["id_prestashop", "nom_categoria"];
public $timestamps = false;
public function fabricaciones() {
return $this->hasMany("App\Models\Fabricacion", "id_categoria", "id_categoria");
}
public function tareas() {
return $this->belongsToMany("App\Models\Tarea", "categorias_tareas", "id_categoria", "id_tarea")->withPivot("orden");
}
}
Ubicacion:(ubication)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Ubicacion extends Model
{
protected $table = "ubicaciones";
protected $primaryKey = "id_ubicacion";
protected $fillable = ["nom_ubicacion"];
public $timestamps = false;
public function fabricaciones() {
return $this->hasMany("App\Models\Fabricacion", "id_incidencia", "id_incidencia");
}
}
Medida:(测量)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Medida extends Model
{
protected $table = "medidas";
protected $primaryKey = "id_medida";
protected $fillable = ["nom_medida"];
public $timestamps = false;
public function fabricaciones() {
return $this->belongsToMany("App\Models\Fabricacion", "fabricacion_medidas", "id_medida", "id_fabricacion")->withPivot("medida");
}
}
Atributo:(属性)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Atributo extends Model
{
protected $table = "atributos";
protected $primaryKey = "id_atributo";
protected $fillable = ["id_prestashop", "nom_medida"];
public $timestamps = false;
public function fabricaciones() {
return $this->belongsToMany("App\Models\Fabricaion", "fabricacion_atributos", "id_atributo", "id_fabricacion")->withPivot("atributo");
}
}
- 分类关系:(类别)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Tarea extends Model
{
protected $table = "tareas";
protected $primaryKey = "id_tarea";
protected $fillable = ["nom_tarea", "posicion"];
public $timestamps = false;
public function categorias() {
return $this->belongsToMany("App\Model\Categoria", "categorias_tareas", "id_tarea", "id_categoria")->withPivot("orden");
}
public function zonas() {
return $this->hasMany("App\Models\Zona", "id_tarea", "id_tarea");
}
}
- Tarea关系:(任务)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Zona extends Model
{
protected $table = "zonas";
protected $primaryKey = "id_zona";
protected $fillable = ["nom_zona", "posicion", "id_tarea", "impresora", "minSierra"];
public $timestamps = false;
public function tarea() {
return $this->belongsTo("App\Models\Tarea", "id_tarea", "id_tarea");
}
}
问题在于我希望通过类别(类别),ubicacion(ubication),zona(工作空间)和tarea(任务)获取所有fabricacion(产品)数据过滤,获取它的atributos(属性)和medidas(度量) )。
例如:我想从zona(工作空间)=&gt;获取所有fabricacion(产品)数据X,其中categoria(category)=&gt; Y和ubicacion(ubication)=&gt;一个。 产品有一个类别,类别与任务相关(因此,具有X类别的产品将在工作区Y中)。 并且产品具有状态(因此,如果在状态1和类别中1是任务,则产品将在该任务中)。
这可能会被严重解释。有时我不解释自己,我不太懂英语。
答案 0 :(得分:0)
在这种情况下,我将创建一个控制器方法,从视图中接收所有过滤器(zona,categoria和ubicacion),通过ajax发送。之后,您可以使用查询中的参数,并具有应用过滤器的通用函数,并返回您在视图中指定的内容。
所以,步骤将是:
创建一个调用控制器功能的路由。
使用要在邮件数据中应用的过滤器向该路线发送ajax请求。
在控制器功能中接收过滤器的信息并创建查询。
在web.php或routes.php文件中添加路由。
Route::get('fabricaciones/data', 'HomeController@data'); // whatever controller name
进行查询的控制器方法的示例如下:
function data(Request $request)
{
$categoria_id = $request->input('categoria_id');
// ...
$result = DB::table('fabricacion')
->join('categorias', 'categorias.id', '=', 'fabricacion.categoria_id')
->join(...) // more joins with the other tables
->where('categorias.id', '=', $categoria_id)
->where(...) // apply more filters
->select('fabricacion.*')
->get();
return $result;
}
您的View中的JavaScript(使用jQuery)中的ajax请求将是这样的,但指向您创建的路径:
$.ajax({
url: 'fabricaciones/data',
type: 'GET',
dataType: 'json',
data: { categoria_id: 1 },
})
.done(function(received_data) {
console.log(received_data);
})
.fail(function() {
console.log("error");
});
答案 1 :(得分:0)
嗯,最后得到了这个,谢谢你的反应^^
$productos = Fabricacion::where(
$where
)
->whereHas("categoria", function($query) use($id_zona) {
$query->whereHas("tareas", function($query) use($id_zona) {
$query->whereHas("zonas", function($query) use($id_zona) {
$query->where([
["zonas.id_zona", "=", $id_zona]
]);
$query->whereRaw("categorias_tareas.orden = `fabricacion`.`estado`");
});
});
})
->with(["medidas", "atributos"])
->orderBy("fabricacion.date_update", $date);