出于这个问题的目的,我已经概括了我的代码。
假设我的数据库中有4个与不同表相关的模型
Models: ObjectType1, ObjectType2, ObjectType3, AllObjects
Tables: object-type-1, object-type-2, object-type-3, all-objectsAllObjects模型包含一个函数getRowsFromTable,它接受一个表名(object-type-1| object-type-2 | object-type-3)。它还包含一个名为getSpecificColumns的函数,该函数也接受一个表名。
all-objects表格的格式如下:
id | name | p1 | p2 | p3 | p4 | p5 | p6 |created_at
---|------|----|----|----|----|----|----|-----------
1 |elem-1| x | x | x |null|null|null| date1
2 |elem-2| y | y | y |null|null|null| date2
3 |elem-3|null|null|null| z | z |null| date3
4 |elem-4|null|null|null|null|null| w | date4object-type-1如下:
id | name | p1 | p2 | p3 |created_at
---|------|----|----|----|-----------
1 |elem-1| x | x | x | date1
2 |elem-2| y | y | y | date2object-type-2如下:
id | name | p4 | p5 |created_at
---|------|----|----|-----------
1 |elem-3| z | z | date3object-type-3,如下所示:
id | name | p6 |created_at
---|------|----|-----------
1 |elem-4| w | date4AllObjects模型中的函数:
public static function getSpecificColumns($tableName){
$columns = Schema::getColumnListing($tableName);
$removeColumns = ['id', 'created_at'];
foreach($removeColumns as $needle){
$key = array_search($needle,$columns);
unset($columns[$key]);
}
return $columns;
}
public static function getAllRowsFromTable($tableName){
$columnsUsed = AllObjects::getSpecificColumns($tableName);
if($tableName = "object-type-1"){
$allRows = ObjectType1::select($columnsUsed)->get(); //This is where my problem is
}
else if($tableName = "object-type-2"){
$allRows = ObjectType2::select($columnsUsed)->get(); //This is where my problem is
}
else if($tableName = "object-type-3"){
$allRows = ObjectType3::select($columnsUsed)->get(); //This is where my problem is
}
return $allRows;
}我的问题是,如何编写查询来获得所请求的表所需的特定行的多维数组?
例如,如果传入的类型是“object- $tableName -1”,我希望返回一个数组$allRows,其中:
$allRows[0] = ['name' => "elem-1", 'p1' => "x", 'p2' => "x", 'p3' => "x"]
$allRows[1] = ['name' => "elem-2", 'p1' => "y", 'p2' => "y", 'p3' => "y"]我试过了:
$numColumns = count($columnsUsed);
$index = 0;
$allRows = ObjectType1::select(
foreach($columnsUsed as $column) {
echo "'" . $column "'";
$index++;
if($numColumns > $index)
echo ",";
})->get(); 但是它不允许在'select‘语句中使用foreach循环。
发布于 2015-10-24 01:47:33
ObjectType1::select("'".implode("','", $columnsUsed)."'")->get();implode()所做的工作与您正在使用foreach循环所做的工作几乎完全相同,应该可以省去一些麻烦。
https://stackoverflow.com/questions/33306398
复制相似问题