我一直在构建查询并重复代码,有没有办法将其构建到雄辩的模型中?
我有一个模型Transaction
,我在这里选择特定货币。如何将其添加到模型中?有没有办法改变这个:
Transaction::select('*')->where('currency', '=', 'GBP')
所以我可以这样做:
Transaction::select('*')->currency('GBP')
然后在模型中,它以某种方式添加到查询中。我试图创建Transaction::currency
但它没有用。这只是一个例子,我计划添加一些选择器来保持代码清洁。
class Transaction extends Model
{
protected $table = 'transactions';
public function currency($query, $currency) {
return $query->where('currency', '=', $currency);
}
}
答案 0 :(得分:1)
你差不多完成了,你必须把货币方法写成查询范围。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.inputmethodservice.KeyboardView
android:id="@+id/keyboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:textDirection="rtl"
android:keyPreviewLayout ="@layout/preview"></android.inputmethodservice.KeyboardView>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</FrameLayout>
完成后,你可以使用这样的范围
public function scopeCurrency($query, $currency) {
return $query->where('currency', '=', $currency);
}
有关详细信息,请转到此处https://laravel.com/docs/5.2/eloquent#local-scopes
答案 1 :(得分:1)
Laravel有这样的东西叫做查询范围。它允许您完全按照自己的意愿行事。您只需要在currency()
方法前加上范围关键字,如下所示:
class Transaction extends Model
{
protected $table = 'transactions';
public function scopeCurrency($query, $currency) {
return $query->where('currency', '=', $currency);
}
}
然后你可以执行此操作Transaction::select('*')->currency('GBP')
详细了解范围here
答案 2 :(得分:0)
您可以使用范围来完成此操作。
将这些代码添加到Transaction.php文件
public function scopeCustom($query, $column, $exp, $value)
{
return $query->where('votes', $exp, $value); // ('currency', '=', 'GBP')
}
现在将此范围用作
Transaction::select('*')->custom('currency', '=', 'GBP');
Transaction::select('*')->custom('amount', '>', 1000);