您阅读的所有聊天的第一个首选ID。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyForm extends StatefulWidget {
@override
State createState() {
return _MyFormState();
}
}
class _MyFormState extends State<MyForm> {
static final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final Map<int,String> model = Map<int,String>();
@override
void initState() {
print('initState()');
for (int i = 0; i < 20; i++) {
model[i] = null;
}
super.initState();
}
String validate(String value) {
return value.isEmpty ? 'Cannot be blank!' : null;
}
void submitForm() {
final FormState formState = _formKey.currentState;
if (formState.validate()) {
print('form is valid');
formState.save();
} else {
print('form is invalid');
}
}
@override
Widget build(BuildContext context) {
List<Widget> fields = [];
for (int i = 0; i < 20; i++) {
Widget widget = TextFormField(
initialValue: model[i],decoration: InputDecoration(
labelText: 'field $i',),validator: validate,onFieldSubmitted: (String value) {
print('field $i onFieldSubmitted()');
setState(() {
model[i] = value;
});
},onChanged: (String value) {
print('field $i onChanged()');
setState(() {
model[i] = value;
});
},onSaved: (String value) {
print('field $i onSaved()');
setState(() {
model[i] = value;
});
},);
fields.add(widget);
}
fields.add(RaisedButton(
child: Text('save'),onPressed: submitForm,));
return Form(
key: _formKey,child: ListView(
children: fields,);
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',theme: ThemeData(
primarySwatch: Colors.blue,home: Scaffold(
appBar: AppBar(
title: Text('form test'),body: MyForm(),);
}
}
然后申请
$pluckedId=Chat::has('messages.reads',function (Builder $q) {
return $q->where('user_id',auth()->id());
})->pluck('id');
,
好吧,我终于找到了一种方法,该方法仅提取聊天的最后一条消息,并使用查询生成器方法检查特定用户是否已阅读了该消息。
在这里,我使用子查询发布魔法范围;)
public function scopeUnreadBy(Builder $builder,int $userId)
{
//First,look for Chats with Messages
return $builder->whereHas('messages',function (Builder $q) use ($userId) {
$q->select(['last_message' => function(\Illuminate\Database\Query\Builder $sub) {
// Then,take only last one Message
$sub->select('id')
->from('messages')
->where('chat_id','chats.id')
->latest()
->limit(1);
}])->whereDoesntHave('reads',function(Builder $q) use ($userId) {
// Finally,check that last one has not been read :D
return $q->where('user_id',$userId);
});
});
}
Ph,那很难。
我希望它对其他人有帮助!
请记住,所有这些都可以通过一个查询完成;)
本文链接:https://www.f2er.com/3161134.html