一个模型实例的Laravel查询关系

时间:2017-07-07 14:41:25

标签: laravel-5 laravel-5.4

我知道我可以使用using System; using Android.App; using Android.Content; using Android.Content.PM; using Android.Runtime; using Android.Views; using Android.Widget; using Android.OS; using Android.Util; using Gcm.Client; namespace Waka.Droid { [Activity(Label = "Waka.Droid", Icon = "@drawable/icon", Theme = "@style/MyTheme", MainLauncher = false, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity { public static MainActivity instance; protected override void OnCreate(Bundle bundle) { TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = Resource.Layout.Toolbar; base.OnCreate(bundle); instance = this; global::Xamarin.Forms.Forms.Init(this, bundle); LoadApplication(new App()); RegisterWithGCM(); } private void RegisterWithGCM() { // Check to ensure everything's set up right GcmClient.CheckDevice(this); GcmClient.CheckManifest(this); // Register for push notifications GcmClient.Register(this, Constants.SenderID); } } } 来查询Laravel中的Eloquent关系,如下所示:

count()

if(count($question->answers())) answers()关系的位置:

hasMany

我的问题是,当 public function answers() { return $this->hasMany('App\Models\Answer', 'question_id'); } 不是整个集合而是一个模型实例时,我该如何做?

$question

如何使用$question = Question::where('id',$key)->first(); 查询上述问题,仅针对该问题查询潜在关系?

我总是得到一个大于零的count(),即使所选问题没有关联的答案,这意味着我的if块总是运行并返回无保证的count()值:

null

2 个答案:

答案 0 :(得分:2)

由于调用$question->answers()正在返回QueryBuilder个实例,因此调用count()很可能始终返回1。如果您访问$question->answers(作为property而不是method),或使用完整逻辑$question->answers()->get();,则应正确返回Collectioncount() 1}}将正确运行:

$question = Question::where('id',$key)->first();

if(count($question->answers) > 0){
  // Do something
}

// OR

if(count($question->answers()->get()) > 0){ 
  ... 
}

根据@maraboc的建议,您还可以使用$question条款急切加载answers ->with()

$question = Question::with(["answers"])->where('id',$key)->first();

但即使在这种情况下,$question->answers()仍会返回QueryBuilder个实例,因此请将其property作为count()进行访问,以便正常运行。

答案 1 :(得分:0)

由于已经指出count($question->answers())没有意义,因为$question->answers()是一个Relation实例,你可以调用它的动态查询方法,但如果你想计算元素,你需要一个集合,即{{1} }。

所以你有两个选择:

  1. 统计集合:$question->answers
  2. 要求数据库进行计数:count($question->answers)
  3. 圆括号