我想使用Eloquent ORM通过以下SQL获得价值.
- SQL
SELECT COUNT(*) FROM
(SELECT * FROM abc GROUP BY col1) AS a;
Run Code Online (Sandbox Code Playgroud)
然后我考虑了以下内容.
- 代码
$sql = Abc::from('abc AS a')->groupBy('col1')->toSql();
$num = Abc::from(\DB::raw($sql))->count();
print $num;
Run Code Online (Sandbox Code Playgroud)
我正在寻找更好的解决方案.
请告诉我最简单的解决方案.
我想使用SQL Query中的数据,在这里进一步解释它是我的代码:
$myquery = DB::table('attendances')->select('user_id')->where('date_only', '=', $newdate)->orderBy('logon','asc')->get();
$myquery->user_id;
Run Code Online (Sandbox Code Playgroud)
现在我希望我的$ myquery的值为USER_ID的值,如果我使用了上面的代码,我会收到错误 - $ myquery-> user_id;
在Laravel中指定存在的验证规则时,是否有一种引用另一个字段的方法?我希望能够说输入a必须存在于表a中,输入b必须存在于表b中,并且表b中列x的值必须等于输入a.
最好用例子解释:
public $rules = array(
'game_id' => 'required|exists:games,id',
'team1_id' => 'required|exists:teams,id,game_id,<game_id input value here>',
'team2_id' => 'required|exists:teams,id,game_id,<game_id input value here>'
);
Run Code Online (Sandbox Code Playgroud)
因此,根据我的验证规则,我希望能够确保:
game_id
存在于games
表(id
字段)中team1_id
存在于teams
表(id
字段)中,game_id
列(在teams
表中)必须等于game_id
输入的值.team2_id
所以,如果在我的形式,我进入1
了game_id
,我希望能够确保两者的球队表中的记录team1_id
,并team2_id
具有价值1
的game_id
.
我希望这是有道理的.
谢谢
我创建了3个表:users,roles和role_user.
用户模型:
public function roles()
{
return $this->belongsToMany('Role');
}
Run Code Online (Sandbox Code Playgroud)
没关系,我可以得到关系
$roles = User::find(1)->roles;
Run Code Online (Sandbox Code Playgroud)
但是当我改变的时候
$roles = User::where('name', 'Test')->get()->roles;
Run Code Online (Sandbox Code Playgroud)
Undefined property: Illuminate\Database\Eloquent\Collection::$roles
那是错误的还是'找','哪里'有区别?如果我想在哪里使用获取关系,我该怎么办?
我有两个查询,第一个给我一个id数组,这是一个特定的顺序.然后我将这个ID数组传递给第二个查询,如下所示:
Operation::whereIn('id', $ids)->get();
Run Code Online (Sandbox Code Playgroud)
但是当我输出该查询的结果时,顺序已经改变,如果数组$ ids类似于(4,2,6,9),这是我想要结果的顺序,输出将给我2 ,4,6,9.我怎么能避免这种情况?
我有三张桌子:
products: id|name|description|slug|category_id|...
reviews: id|product_id|review_text|name|email|...
review_rows id|review_id|criteria|rating
Run Code Online (Sandbox Code Playgroud)
审查表存储审阅文本,审阅的编写者并具有外部product_id密钥.review_rows表存储不同标准的评级,例如:
----------------------------------------
| id | criteria | rating | review_id |
----------------------------------------
| 1 | price | 9 | 12 |
----------------------------------------
| 2 | service | 8 | 12 |
----------------------------------------
| 3 | price | 6 | 54 |
----------------------------------------
| 4 | service | 10 | 54 |
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
审核行使用review_id外键链接到审阅表.我已经建立了这样的模型关系:
Product -> hasMany -> Review
Review -> belongsTo -> Product
Review -> hasMany -> ReviewRow
ReviewRow -> belongsTo -> Review …
Run Code Online (Sandbox Code Playgroud) 为什么new static
在闭包中(在类static
方法中)等于new self
PHP5.5,而它在PHP5.6中是否正确绑定?
鉴于:
abstract class Parent {
public function __construct($something)
{
$this->something = $something;
}
public static function make($array)
{
return array_map(function ($el) {
return new static($el);
}, $array);
}
}
class Child extends Parent {
}
Run Code Online (Sandbox Code Playgroud)
然后
Child::make($someArray);
// PHP5.5 FatalError: cannot instantiate abstract class Parent
// PHP5.6 works fine, as expected
Run Code Online (Sandbox Code Playgroud)
在5.5中,这将按预期工作:
public static function make($array)
{
$child = get_called_class();
return array_map(function ($el) use ($chlid) {
return new $child($el);
}, $array); …
Run Code Online (Sandbox Code Playgroud) 在Laravel 4中,我有一个"Meta"模型,可以通过"object_id"和"object_type"属性与任何对象相关联.例如:
id: 1
object_id: 100
object_type: User
key: favorite_ice_cream
value: Vanilla
Run Code Online (Sandbox Code Playgroud)
我通过在http://laravel.com/docs/eloquent#polymorphic-relations中描述的morphTo()和morphMany()正常工作,所以我可以通过以下方式拉取用户及其所有元素:
$ user = User :: with('meta') - > find(100);
我现在要弄清楚的是:有一种简单的方法可以将meta保存到我的用户身上吗?如:
$user = User::find(100);
$user->meta()->save(['key' => 'hair_color', 'value' = 'black']);
Run Code Online (Sandbox Code Playgroud)
无论在元上正确设置object_id和object_type需要保存什么.由于我已经定义了模型中的关系,我不确定是否会自动完成.我随机尝试了几种不同的方法,但每次都崩溃了.
在执行以下操作时,Laravel缓存机制可以正常工作:
$users = User::remember(10)->get();
Run Code Online (Sandbox Code Playgroud)
但在做的时候:
$users = User::with('posts','addresses')->remember(10)->get();
Run Code Online (Sandbox Code Playgroud)
它不会缓存整个查询集,特别是连接查询(eager loading).
有没有办法缓存上面示例中执行的所有查询?谢谢!
我有一个产品模型和一个属性模型。
产品有属性。
问题是我无法使用 Attributes 作为扩展 eloquent 的 Product 类的成员,因为 eloquent 已经使用了它。有没有解决的办法?
class Product extends Model
{
protected $attributes;
// ...
}
Run Code Online (Sandbox Code Playgroud)